所以我看到了these two questions on 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
答案 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不起作用,因为你必须在浮动结束时需要一个空格。否则是语法错误。