1

我在 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 代码示例。是不是一个广为人知的功能?或者实际上有理由更喜欢旧方式?///

4

3 回答 3

8

我认为//截断是众所周知的,但是人们不愿意在他们编写的每个模块中“从未来导入”。

经典方法(使用float(sum(seq))等来获得浮点结果,int(...)截断其他浮点除法)是您在 C++ 中使用的方法(在 C、Java、Fortran 中使用稍有不同的语法...),如以及包含在 2.7 之前的每个 Python 版本中的“原生”,因此如果很多人非常习惯并习惯于所说的“经典方法”,这也就不足为奇了。

当 Python 3 变得比 Python 2 更广泛和广泛使用时,我预计事情会发生变化。

于 2010-08-20T05:11:29.823 回答
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
于 2010-08-20T05:50:19.013 回答
1

对我来说,使用 int 进行划分总是有意义的,并且 int 会产生一种通常不会进行动态类型转换的语言。

于 2010-08-20T10:34:37.923 回答