040和40之间的差异

时间:2013-12-27 16:41:23

标签: python python-2.7

我是一名新的Python程序员,偶然发现了这种看似异常的现象 -

>>> line = input()
40
>>> print line*3
120
>>> line = input()
040
>>> print line*3
96

造成这种偏差的原因是什么?有解释吗?

2 个答案:

答案 0 :(得分:7)

040是一个octal整数字面值。它的值 0 * 8 2 + 4 * 8 1 + 0 * 8 0 == 32 。因此,当您将其乘以3时,结果为96。

Python 2.x中整数文字的语法在语言参考的2.4.4. Integer and long integer literals部分中给出。

感谢@JonClements指出040仅在Python 2.x中有效,而在3.x中无效(请参阅下面的注释)。

答案 1 :(得分:2)

Python 2.x将040解析为八进制数。现在,这些天八进制数的唯一原因可能是混淆不到二十年前开始的程序员,但事实上我们仍然拥有它们......