元组何时需要括号?
是否有地方需要精确定义引用,何时需要用括号将元组括起来?
这是一个最近令我惊讶的例子:
>>> d = {}
>>> d[0,] = 'potato'
>>> if 0, in d:
File "<stdin>", line 1
if 0, in d:
^
SyntaxError: invalid syntax
-
使用逗号标记将表达式的组合以创建元组称为
expression_list
。运算符优先级规则不涵盖表达式列表;这是因为表达式列表本身不是表达式;当用括号括起来时,它们成为表达式。所以,一个未封闭
expression_list
被允许在Python,它是具体由语言的语法允许的任何地方,但 不是
在那里的expression
,因此是必需的。例如,if语句的语法如下:
if_stmt ::= "if" expression ":" suite ( "elif" expression ":" suite )* ["else" ":" suite]
因为
expression
引用了生产,expression_list
所以不允许将未封闭的s作为if
语句的主题。但是,for语句接受expression_list
:for_stmt ::= "for" target_list "in" expression_list ":" suite ["else" ":" suite]
因此,允许以下内容:
for x in 1, 2, 3: print(x)