为什么“1.real”是语法错误但“1 .real”在Python中有效?

时间:2015-06-24 21:42:19

标签: python

所以我看到了these two questions on twitter1.real语法错误如何但1 .real不是?

>>> 1.real
  File "<stdin>", line 1
    1.real
         ^
SyntaxError: invalid syntax
>>> 1 .real
1
>>> 1. real
  File "<stdin>", line 1
    1. real
          ^
SyntaxError: invalid syntax
>>> 1 . real
1
>>> 1..real
1.0
>>> 1 ..real
  File "<stdin>", line 1
    1 ..real
       ^
SyntaxError: invalid syntax
>>> 1.. real
1.0
>>> 1 .. real
  File "<stdin>", line 1
    1 .. real
       ^
SyntaxError: invalid syntax

3 个答案:

答案 0 :(得分:55)

我想.被贪婪地解析为数字的一部分,如果可能的话,使其成为float 1.,而不是方法调用的一部分。

小数点周围不允许有空格,但在方法调用中.之前和之后可以有空格。如果数字后跟一个空格,则数字的解析将被终止,因此它是明确的。

让我们看一下不同的案例以及如何解析它们:

>>> 1.real    # parsed as (1.)real  -> missing '.'
>>> 1 .real   # parsed as (1).real  -> okay
>>> 1. real   # parsed as (1.)real  -> missing '.'
>>> 1 . real  # parsed as (1).real  -> okay
>>> 1..real   # parsed as (1.).real -> okay
>>> 1 ..real  # parsed as (1)..real -> one '.' too much
>>> 1.. real  # parsed as (1.).real -> okay
>>> 1 .. real # parsed as (1)..real -> one '.' too much

答案 1 :(得分:11)

使用1.real Python正在寻找像1.0这样的浮点数字文字,并且你不能在浮点数中拥有r。使用1 .real Python将1作为整数并对其进行属性查找。

值得注意的是,浮点语法错误处理发生在.属性查找之前。

答案 2 :(得分:1)

1.real可以工作,因为它是在整数1上调用的属性。

1.real不起作用,因为你必须在浮动结束时需要一个空格。否则是语法错误。