1

我遇到了以下问题:

如您所料:

>>> [01,02,03]
[1, 2, 3]

将多余0的加到整数的前面会得到整数N的数学等价物0N,即N

但是,当我这样做时:

>>> [030, 031, 031, 031, 030, 031, 031, 032, 031, 032]
[24, 25, 25, 25, 24, 25, 25, 26, 25, 26]

事实证明,这个概念是完全错误的。我试图通过检查是否030是 int 来找出为什么会这样:

>>> type(030)
<type 'int'>

然后我想也许是,030被评估为24,然后它变成了type(24). 所以我想看看发生了什么dis可能会有所帮助:

>>> dis.dis('n=030')
          0 JUMP_FORWARD    12349 (to 12352)
          3 DELETE_SLICE+1 
          4 <48>           
>>> dis.dis('n=30')
          0 JUMP_FORWARD    13117 (to 13120)
          3 <48>    

这无助于弄清楚为什么会发生这种行为。那么,这种行为背后的原因是什么?

根据标题:

>>> 030 == 24
True
4

3 回答 3

10

前导0表示八进制或base8。这是为 Python2 定义的行为,但由于它造成的混乱,您现在需要0o30在 Python3 中编写,就像编写0x18十六进制数字一样

0o30语法也适用于 Python2.7,因此如果您确实希望编写八进制文字,最好使用它

这也是导致错误的原因 - 808099 不是有效的八进制数字

于 2013-05-21T05:34:10.797 回答
1

030是八进制表示法,是 3*8 所以 24。

于 2013-05-21T05:34:13.840 回答
1

添加0到 python 数字的前面使其成为八进制数。因此030= 3 * 8 = 24 以十进制表示。

于 2013-05-21T05:34:14.513 回答