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

Ale*_*sen 31 python

所以我在twitter上看到了这两个 问题.如何1.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
Run Code Online (Sandbox Code Playgroud)

tob*_*s_k 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
Run Code Online (Sandbox Code Playgroud)

  • 有趣的事实:这个答案的SO语法突出显示与Python解释它的方式一致.也就是说,`1`和`real`之间应该只有一个黑点(与红点相对). (10认同)
  • 我很想拒绝这一点,因为我不想承认'1..real`是"好的".... + 1虽然为了向我展示一些我不认识的东西(令人畏缩的). (6认同)

kin*_*all 11

随着1.realPython是寻找一个浮点数字文字一样1.0,你不能有r一个浮动.使用1 .realPython 1作为整数,并在其上进行属性查找.

重要的是要注意浮点语法错误处理在.属性查找之前发生.

  • ......是的?我不明白你的意见. (2认同)