为什么Python程序员仍然使用旧式划分?

时间:2010-08-20 05:06:55

标签: python integer-division

我在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//不是广为人知的特征吗?或者是否有理由更喜欢旧的方式?

3 个答案:

答案 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的结果总是有意义的,因此会产生一种通常不会在飞行类型转换中执行的语言。