为什么在Python中调用数字文字的方法时出现语法错误?

Bjö*_*lex 4 python syntax

我只能在将数字绑定到名称时调用数字上的方法:

>>> a = 5
>>> a.bit_length()
3
Run Code Online (Sandbox Code Playgroud)

我可以调用字符串文字的方法:

>>> 'Hello World'.lower()
'hello world'
Run Code Online (Sandbox Code Playgroud)

但是我不能在数字文字上调用方法:

>>> 5.bit_length()
Run Code Online (Sandbox Code Playgroud)

这提出了一个SyntaxError.是否有实际的理由,还是历史性的?

编辑刚刚找到这个相关的问题,显示了解决方法(这里也已经提出过).我想这也回答了主要问题 - 通过简单的解决方法,可能没有足够的好处使语法更复杂(并且更难解析)来使这项工作.

the*_*eye 7

根据以下规则解析浮点数,引用文档,

floatnumber   ::=  pointfloat | exponentfloat
pointfloat    ::=  [intpart] fraction | intpart "."
exponentfloat ::=  (intpart | pointfloat) exponent
intpart       ::=  digit+
fraction      ::=  "." digit+
exponent      ::=  ("e" | "E") ["+" | "-"] digit+
Run Code Online (Sandbox Code Playgroud)

当Python看到时5.,它认为语法遵循[intpart] fraction | intpart "."规则.因此,它拾取下一个字符并发现它与fraction规则不匹配.这就是抛出语法错误的原因.

你可以绕过那个

5 .bit_length()
Run Code Online (Sandbox Code Playgroud)

或者将其括在括号中

(5).bit_length()
Run Code Online (Sandbox Code Playgroud)