我可以在字符串文字上调用str
方法。但我无法在整数字面上调用int
方法:
Python 2.7.5+ (default, Sep 19 2013, 13:48:49)
>>> 1.bit_length()
File "<stdin>", line 1
1.bit_length()
^
SyntaxError: invalid syntax
>>> a = 1
>>> a.bit_length()
1
>>> ', '.join(['1', '2'])
'1, 2'
>>>
为什么?
答案 0 :(得分:9)
Python将1.
视为浮点数的开头,但无法解析该行的其余部分。将其更改为
(1).bit_length()
通过用括号括起数字文字,我们确保python计算parens中的表达式,即1
并在该数字上调用方法。
Python像这样定义floating point literal
floatnumber ::= pointfloat | exponentfloat
pointfloat ::= [intpart] fraction | intpart "."
exponentfloat ::= (intpart | pointfloat) exponent
intpart ::= digit+
fraction ::= "." digit+
exponent ::= ("e" | "E") ["+" | "-"] digit+
根据该定义,词法分析器认为1.bit_length()
将是浮点字面值,因为1.
匹配[intpart] fraction
的开头。但该线的其余部分不匹配。这就是它失败的原因。