我在2001年开始使用Python。我喜欢这种语言的简单性,但是让我感到烦恼的一个特点就是/
运算符,这会让我在像
def mean(seq):
"""
Return the arithmetic mean of a list
(unless it just happens to contain all ints)
"""
return sum(seq) / len(seq)
幸运的是,PEP 238已经写好了,一旦我找到新的from __future__ import division
语句,我就开始虔诚地将它添加到我写的每个.py文件中。
但是这里差不多9年了,我仍然经常看到Python code samples use /
for integer division。 //
不是广为人知的特征吗?或者是否有理由更喜欢旧的方式?
答案 0 :(得分:8)
我认为截断的//
是众所周知的,但人们不愿意在他们编写的每个模块中“从未来导入”。
经典的方法(使用float(sum(seq))
等来获取浮点结果,int(...)
来截断一个其他浮点除法)是你在C ++中使用的方法(并且语法稍有不同)在C,Java,Fortran,...)中,以及通过2.7包含的每个Python版本中的“本机”,所以如果很多人都非常习惯,并且习惯于说“经典方法”,那就不足为奇了。
当Python 3比Python 2更广泛和广泛使用时,我希望事情会发生变化。
答案 1 :(得分:2)
如果您愿意,可以为整个翻译更改/
的行为,因此不必在每个模块中从以后导入
$ python -c "print 1/2"
0
$ python -Qwarn -c "print 1/2"
-c:1: DeprecationWarning: classic int division
0
$ python -Qnew -c "print 1/2"
0.5
答案 2 :(得分:1)
对我而言,使用整数赋予int和int的结果总是有意义的,因此会产生一种通常不会在飞行类型转换中执行的语言。