我只能在将数字绑定到名称时调用数字上的方法:
>>> 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.是否有实际的理由,还是历史性的?
编辑刚刚找到这个相关的问题,显示了解决方法(这里也已经提出过).我想这也回答了主要问题 - 通过简单的解决方法,可能没有足够的好处使语法更复杂(并且更难解析)来使这项工作.
根据以下规则解析浮点数,引用文档,
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)