Python整数部
示例
当应用于整数时,标准除法符号(/)在Python3和Python2中的运行方式有所不同。
在Python3中将一个整数除以另一个整数时,除法运算x/y表示真正的除法(uses__truediv__方法)并产生浮点结果。同时,Python2中的同一操作代表了经典的除法运算,该运算将结果向下舍入为负无穷大(也称为发言权)。
例如:
舍入为零的行为在Python2.2中已弃用,但在Python2.7中出于向后兼容的原因保留了该行为,并在Python3中将其删除。
注意:要在Python2中获得浮点结果(无底舍入),我们可以指定带小数点的操作数之一。上面的示例在Python22/3中给出0了应该用作2/3.0or2.0/3或2.0/3.0获取0.6666666666666666
还有一个楼层除法运算符(//),在两个版本中的工作方式相同:将其舍入为最接近的整数。(尽管与float一起使用时会返回float)。在这两个版本中,//运算符都映射到__floordiv__。
可以使用operator模块中的本机函数显式强制执行真正的除法或下限除法:
from operator import truediv, floordiv assert truediv(10, 8) == 1.25 #等价于Python3中的`/` assert floordiv(10, 8) == 1 # equivalent to `//`
尽管清晰明了,但对每个分区使用运算符功能可能很繁琐。/通常会首选更改运算符的行为。一种常见的做法是通过from__future__importdivision在每个模块中添加第一条语句来消除典型的除法行为:
#需要成为模块中的第一条语句 from __future__ import division
from__future__importdivision保证/运算符代表真实的划分并且仅在包含__future__导入的模块内进行,因此没有令人信服的理由在所有新模块中均未启用它。
注意:其他一些编程语言使用取整为零(截断),而不是像Python那样取整为负无穷大(即那些语言-3/2==-1)。移植或比较代码时,此行为可能会造成混乱。
注意上浮动操作数:作为替代from__future__importdivision,可以使用通常的除法符号/,并确保该操作数中的至少一个是一个浮动:3/2.0==1.5。但是,这可以认为是不良做法。编写起来太容易了,忘记了将其中一个参数强制转换为float。此外,这种情况在测试期间可能经常会漏掉注意,例如,如果您在包含s的数组上进行测试但在生产中收到s的数组。此外,如果在Python3中使用了相同的代码,则预期为True的程序将无法正常运行。average=sum(items)/len(items)floatint3/2==1
有关为什么在Python3中更改除法运算符以及为何应避免使用旧式除法的更多详细原理,请参阅PEP238。
有关除法的更多信息,请参见“简单数学”主题。