Python integer division yields float
1 2 3 4 | Python 3.1 (r31:73574, Jun 26 2009, 20:21:35) [MSC v.1500 32 bit (Intel)] on win32 Type"help","copyright","credits" or"license" for more information. >>> 2/2 1.0 |
这是有意的吗? 我强烈记得早期版本返回
请看PEP-238:更改分部操作员
The // operator will be available to request floor division unambiguously.
哎呀,马上找到
希望它可以立即帮助某人。
Python 2.7和Python 3中除法运算符的行为
In Python 2.7: By default, division operator will return integer output.
将结果以双倍倍数1.0获得"除数或除数"
1 2 3 | 100/35 => 2 #(Expected is 2.857142857142857) (100*1.0)/35 => 2.857142857142857 100/(35*1.0) => 2.857142857142857 |
In Python 3
1 2 3 4 5 6 | // => used for integer output / => used for double output 100/35 => 2.857142857142857 100//35 => 2 100.//35 => 2.0 # floating-point result if divsor or dividend real |
已经接受的答案已经提到了PEP 238.我只是想在没有阅读整个PEP的情况下为那些对正在发生的事情感兴趣的人添加一个快速的视角。
Python将诸如
1 | a.__add__(b) |
关于Python 2中的除法,默认情况下只有
Python 2.2引入了
-
/ 映射到__truediv__ ,必须"返回合理的近似值
分裂的数学结果"(引自PEP 238) -
// 映射到__floordiv__ ,它应返回/ 的覆盖结果
使用Python 3.0,PEP 238的更改成为默认行为,Python的对象模型中没有更多特殊方法
如果你想在Python 2和Python 3中使用相同的代码
1 | from __future__ import division |
并坚持