Python 中的十进制(即无前缀)整数似乎比带前缀的整数具有更少的功能。
如果我这样做,1.real
我会得到一个SyntaxError: invalid decimal literal
。但是,如果我这样做0x1.real
,则不会出现错误,并且1
是结果。(0b1.real
和 也是一样0o1.real
,尽管在 Python2 中01.real
给出了语法错误)。
Python 中的十进制(即无前缀)整数似乎比带前缀的整数具有更少的功能。
如果我这样做,1.real
我会得到一个SyntaxError: invalid decimal literal
。但是,如果我这样做0x1.real
,则不会出现错误,并且1
是结果。(0b1.real
和 也是一样0o1.real
,尽管在 Python2 中01.real
给出了语法错误)。
这是因为
1.
引导符被视为浮点文字并且r
不是有效的十进制数字。您所显示的形式的十六进制文字是整数,因此在被视为可能的浮点数时不会产生歧义(没有
0x1.1
)。如果您使用
(1).real
来指定文字只是,那么1
它可以正常工作。以下(带注释的)记录可能会有所帮助:
为了完整性,可以在Python 文档中找到数字(积分和浮点数)的词汇标记:
您可以看到浮点数不允许使用十六进制前缀,这就是为什么它可以安全地假设 in
.
不是0x1.real
文字值的一部分。但对于 来说情况并非如此
1.real
,它假设 位于.
浮点数的小数部分之前。当然,一个足够聪明的词法分析器可以
.
立即检测到后面的无效十进制数字,并因此假设它是调用整数的方法。但这会带来复杂性,并且可能存在其他有问题的极端情况。