小编典典

为什么这不是python中的语法错误?

python

注意到今天在我们的代码库中有一行代码,我认为肯定会因语法错误而使构建失败,但是测试通过了,显然它实际上是有效的python(在2.x和3中)。

条件表达式有时不需要空格:

>>> 1if True else 0
1

如果LHS是变量,则不起作用:

>>> x = 1
>>> xif True else 0
  File "<stdin>", line 1
    xif True else 0
           ^
SyntaxError: invalid syntax

但是它似乎仍然可以与其他类型的文字一起使用:

>>> {'hello'}if False else 'potato'
'potato'

这是怎么回事,出于某种原因,它是否有意成为语法的一部分?这个奇怪的怪癖是已知/记录的行为吗?


阅读 93

收藏
2020-12-20

共1个答案

小编典典

令牌之间的空白

除逻辑行的开头或字符串文字外,空格字符空格,制表符和换页符可互换使用以分隔标记。仅当两个令牌的级联可以另外解释为其他令牌(例如,ab是一个令牌,而ab是两个令牌)时,才需要在两个令牌之间使用空格。

因此,在这种情况下,1if它不是有效的令牌,因此空白是可选的。将1解释为if不属于的整数文字。因此if被单独解释并识别为关键字。

xif但是,标识符是公认的,所以Python是不是能看到你想做的事x if那里。

2020-12-20