调用数字文字的方法

war*_*iuc 2 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'
>>> 
Run Code Online (Sandbox Code Playgroud)

这是为什么?

the*_*eye 9

Python将其1.视为浮点数的开头,但无法解析该行的其余部分.将其更改为

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

通过用括号括起数字文字,我们确保python评估parens中的表达式,即1调用该数字上的方法.

Python定义了像这样的浮点文字

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)

根据这个定义,词法分析器认为这1.bit_length()将是一个浮点字面值,因为1.匹配[intpart] fraction的开头.但该线的其余部分不匹配.这就是它失败的原因.

  • ```1 .bit_length()```也应该有效,但它很难看. (2认同)
  • Ruby如何处理`3.times`? (2认同)