为什么在Python 3中000的值为0?
由于八进制前缀现在在Python 3中是为什么在Python 3中000的值为0?,python,int,literals,python-3.3,python-2.x,python-3.6,python-2.7,Python,Int,Literals,Python 3.3,Python 2.x,Python 3.6,Python 2.7,由于八进制前缀现在在Python 3中是0o,因此再写0777是不合法的。好的 那么,为什么写入正确计算为0的00是合法的,而其他数字会触发语法错误呢 >>> 01 ... File "<interactive input>", line 1 01 ^ SyntaxError: invalid token >>> >>> 00 0 >01 ... 文件“”,第1行 01 ^ SyntaxError:无
0o
,因此再写0777
是不合法的。好的
那么,为什么写入正确计算为0
的00
是合法的,而其他数字会触发语法错误呢
>>> 01
...
File "<interactive input>", line 1
01
^
SyntaxError: invalid token
>>>
>>> 00
0
>01
...
文件“”,第1行
01
^
SyntaxError:无效令牌
>>>
>>> 00
0
如果查看(整型文字部分)页面:
看起来像一个决策者(didnt-dv)@WillemVanOnsem是的,看起来很像。但是它有什么用呢?根据语法,我想说只允许一个零序列(如果它不是以非零数字或
0o
,0b
等开头),这是答案的一部分,谢谢。但是有人知道这有什么用吗?而且00_00
仍然是无效语法。顺便说一句,00_00
在我的Python3中运行良好。6@Jean-弗朗索瓦·法布:我的猜测是,一系列的零总是零,不管一使用的基数是多少。@ukaszRogalski好的,所以下划线是新的,因为在3.4中它不起作用。@AngelSalazar:这是巴科斯·诺尔形式的一个变体:
integer ::= decinteger | bininteger | octinteger | hexinteger
decinteger ::= nonzerodigit (["_"] digit)* | "0"+(["_"] "0")*
...
integer ::= decimalinteger | octinteger | hexinteger | bininteger
decimalinteger ::= nonzerodigit digit* | "0"
octinteger ::= "0" ("o" | "O") octdigit+ | "0" octdigit+