为什么Python程序员还在使用旧式除法?
我从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代码示例,里面居然还用/
来做整数除法。难道//
这个用法不够广为人知吗?还是说其实有理由继续用旧的方式?
3 个回答
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
8
我觉得用//
来截断数字这个方法大家都知道,但很多人不太愿意在自己写的每个模块里都“引入未来”的功能。
传统的方法是使用float(sum(seq))
之类的方式来得到一个浮点数结果,然后用int(...)
来截断本来是浮点数的除法结果。这种方法在C++中是常用的,C、Java、Fortran等语言的语法也稍有不同,但大体上都是这样。而在Python 2.7及之前的版本中,这种“经典方法”也是大家非常熟悉和习惯的,所以很多人用起来很顺手,这也不奇怪。
等到Python 3被更多人使用,超过Python 2的时候,我觉得情况会有所改变。