为什么在Python中对数值文本调用方法是语法错误?

为什么在Python中对数值文本调用方法是语法错误?,python,syntax,Python,Syntax,仅当我将数字绑定到名称时,才能对数字调用方法: >>> a = 5 >>> a.bit_length() 3 我可以调用字符串文本的方法: >>> 'Hello World'.lower() 'hello world' >>> 5.bit_length() 但我无法对数值文本调用方法: >>> 'Hello World'.lower() 'hello world' >>> 5.bi

仅当我将数字绑定到名称时,才能对数字调用方法:

>>> a = 5
>>> a.bit_length()
3
我可以调用字符串文本的方法:

>>> 'Hello World'.lower()
'hello world'
>>> 5.bit_length()
但我无法对数值文本调用方法:

>>> 'Hello World'.lower()
'hello world'
>>> 5.bit_length()
这会引发一个
语法错误
。这有实际原因吗,还是历史原因


Edit刚刚找到了显示变通方法的方法(这里也已经建议了)。我想这也回答了主要的问题——有了简单的解决办法,让语法变得更复杂(更难解析)可能没有足够的好处来实现这一点。

浮点数是按照以下规则解析的

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

你可以通过

5 .bit_length()
或者用这样的括号括起来

(5).bit_length()

实际上,这四个词有点错误,因为语法错误的原因不是
分数
规则不匹配

语法错误的原因是使用此规则将其作为浮点进行解析:

pointfloat    ::=  [intpart] fraction | intpart "."
该数字与第二种形式相匹配,它的整数部分后跟一个
-
5。
是浮点的有效文本,由
5产生的令牌流。bit_length
产生两个令牌:
5.
(即float
5.0
)和
bit_length
;在python中,后跟名称的浮点文本是语法错误

但是,实际上可以使用2个点调用float方法:

>>> 5.0.hex()
'0x1.4000000000000p+2'
>>> 5..hex()
'0x1.4000000000000p+2'
要调用
int
方法,您需要将
5
分开,以使它们被解析为单独的标记。

的可能重复项