调用数字文字的方法

时间:2014-03-02 17:18:17

标签: python python-2.7

我可以在字符串文字上调用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'
>>> 

为什么?

1 个答案:

答案 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的开头。但该线的其余部分不匹配。这就是它失败的原因。