【发布时间】:2014-07-22 18:39:00
【问题描述】:
今天注意到我们的代码库中有一行我认为肯定会因为语法错误而导致构建失败,但测试通过了,显然它实际上是有效的 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'
这里发生了什么,出于某种原因,它是否有意成为语法的一部分?这种奇怪的怪癖是已知/记录在案的行为吗?
【问题讨论】:
-
Python 名称不能以数字开头,这是原因之一。解析器知道
if是一个新令牌。 -
@MartijnPieters 确实如此,但这并不能真正解释到底发生了什么。
-
@BrandonBuck:Poke 已经找到了参考文档的相关部分,但这正是这里发生的事情。
-
注意:如果代码比较难理解,也可以通过tokenize、get the abstract syntax tree或disassemble代码来帮助。
标签: python grammar conditional-expressions