我是一名新的Python程序员,偶然发现了这种看似异常的现象 -
>>> line = input()
40
>>> print line*3
120
>>> line = input()
040
>>> print line*3
96
造成这种偏差的原因是什么?有解释吗?
答案 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
解析为八进制数。现在,这些天八进制数的唯一原因可能是混淆不到二十年前开始的程序员,但事实上我们仍然拥有它们......