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

Why isn't this a syntax error in python?

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

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

1
2
>>> 1if True else 0
1

如果lhs是一个变量,则不起作用:

1
2
3
4
5
6
>>> x = 1
>>> xif True else 0
  File"<stdin>", line 1
    xif True else 0
           ^
SyntaxError: invalid syntax

但它似乎仍然适用于其他类型的文字:

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

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


Whitespace between tokens

Except at the beginning of a logical line or in string literals, the whitespace characters space, tab and formfeed can be used interchangeably to separate tokens. Whitespace is needed between two tokens only if their concatenation could otherwise be interpreted as a different token (e.g., ab is one token, but a b is two tokens).

所以在这个案例,1if不是一个有效的令牌,所以空格是可选的。这是1字面理解为整数这一if不是一个部分。这样的理解和if是公认的作为一个单独的关键字。

xif标识符是公认的,然而,这是不能够的Python,你想要做的x if湖那里。


《Python for the rule双令牌1if哪里输入:整数和if1关键字,因为没有一个数字令牌,开始ifCAN包含的字符串。在其他的手,xif,是公认的作为一个有效的标识符;没有理由相信他们是由一个标识符和关键字,这是传递给解析器作为一个单一的令牌。


我公司是一个知识处理和词汇标记我说什么你看到的是任何一个可以parsed词汇为"不同"(IU数/词典等)从if被做。大多数语言是Python和我想象中的不一样(这当然不包括,indentation水平)。生成的令牌是一个语法,它不在乎,它最有可能的外观和[EXPRESSION] [IF] [EXPRESSION] [ELSE] [EXPRESSION]分组,其中,与你的工作的例子了,很精细。