为什么Python程序员仍然使用旧式除法?

Why do Python programmers still use old-style division?

我在2001年开始使用python。我喜欢语言的简单,但有一个让我恼火的功能是/操作符,它会在一些微妙的地方咬我,比如

1
2
3
4
5
6
def mean(seq):
   """
    Return the arithmetic mean of a list
    (unless it just happens to contain all ints)
   """

    return sum(seq) / len(seq)

幸运的是,PEP238已经被写了,当我发现新的from __future__ import division声明时,我就开始认真地将它添加到我写的每个.py文件中。

但在这里,大约9年后,我仍然经常看到使用/进行整数除法的python代码示例。//不是一个广为人知的功能吗?还是有理由选择旧的方式?


我认为用于截断的//是相当有名的,但是人们不愿意在他们编写的每个模块中"从未来导入"。

经典的方法(使用EDCOX1,1)等来获得一个浮点结果,EDCOX1(2)来截除另一个浮点除法,这是C++中使用的一种方法(在C、Java、FORTRAN、……中略有不同的语法),每一个Python版本中包含2.7个"本地",所以如果很多人都非常使用T,就不足为奇了。哦,舒适地说,"经典的方法"。

当python 3比python 2更加广泛和广泛使用时,我希望事情会有所改变。


如果您愿意,您可以为整个解释器更改/的行为,因此不必在每个模块中从将来导入。

1
2
3
4
5
6
7
$ 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


对我来说,使用in t s进行划分总是有意义的,它产生了一种通常不进行动态类型转换的语言。