之间有什么区别__str__和__repr__在__str__?
如果我在python2.7控制台上运行它,它给我输出为:
>>> 1.2 - 1.0
0.19999999999999996
>>> print 1.2 - 1.0
0.2
Run Code Online (Sandbox Code Playgroud)
我在python3.5.2中运行相同的操作
>>> 1.2 - 1.0
0.19999999999999996
>>> print(1.2 - 1.0)
0.19999999999999996
Run Code Online (Sandbox Code Playgroud)
我想知道为什么在python2.7.12打印语句只给我0.2但在python3.5.2打印函数给我0.19999999999999996.
我正在用这个简单的代码创建一个字典:
pixel_histogram = {}
min_value = -0.2
max_value = 0.2
interval_size = (math.fabs(min_value) + math.fabs(max_value))/bins
for i in range(bins):
key = min_value+(i*interval_size)
print key
pixel_histogram[key] = 0
print pixel_histogram
Run Code Online (Sandbox Code Playgroud)
但我有点惊讶,因为我的印刷品得到了这些值:
#Printing keys
-0.2
-0.16
-0.12
-0.08
-0.04
0.0
0.04
0.08
0.12
0.16
#Printing the dictionary
{0.0: 0,
-0.08000000000000002: 0,
0.15999999999999998: 0,
-0.16: 0,
0.12: 0,
-0.12000000000000001: 0,
0.08000000000000002: 0,
-0.04000000000000001: 0,
-0.2: 0,
0.03999999999999998: 0}
Run Code Online (Sandbox Code Playgroud)
我没弄清楚为什么值不同,我怎么能解决这个问题.任何帮助,将不胜感激.谢谢.
我创建了这个生成器函数:
def myRange(start,stop,step):
r = start
while r < stop:
yield r
r += step
Run Code Online (Sandbox Code Playgroud)
我用两种不同的方式使用它.第一名:
for x in myRange(0,1,0.1):
print x
Run Code Online (Sandbox Code Playgroud)
结果:
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
Run Code Online (Sandbox Code Playgroud)
第二种方式调用函数:
a = [x for x in myRange(0,1,0.1)]
Run Code Online (Sandbox Code Playgroud)
这导致:
[0, 0.1, 0.2, 0.30000000000000004, 0.4, 0.5, 0.6, 0.7, 0.7999999999999999, 0.8999999999999999, 0.9999999999999999]
Run Code Online (Sandbox Code Playgroud)
为什么生成的值不同?
python ×4
dictionary ×1
function ×1
generator ×1
key ×1
numbers ×1
python-2.7 ×1
python-3.x ×1
repr ×1