何时在元组周围需要括号?
是否有一个引用某处定义精确地包含括号的元组是否是必需的?
最近这个例子让我很吃惊:
>>> d = {} >>> d[0,] = 'potato' >>> if 0, in d: File "<stdin>", line 1 if 0, in d: ^ SyntaxError: invalid syntax
使用逗号令牌创build元组的expression式组合称为expression_list
。 运算符优先级的规则不包括expression式列表; 这是因为expression式列表本身不是expression式; 当它们被括在圆括号中时,它们变成expression式。
所以,在Python中任何地方都允许使用一个未封闭的expression_list
,这是语言语法特别允许的,但是不需要 expression
这样的地方。
例如, if语句的语法如下:
if_stmt ::= "if" expression ":" suite ( "elif" expression ":" suite )* ["else" ":" suite]
由于引用了生产expression
,所以不允许将未封闭的expression_list
作为if
语句的主题。 但是, for语句接受一个expression_list
:
for_stmt ::= "for" target_list "in" expression_list ":" suite ["else" ":" suite]
所以下面是允许的:
for x in 1, 2, 3: print(x)
任何地方你都可以使用expression_list
这个术语,你不需要使用括号。
if
语句需要一个expression
,并且不支持expression_list
。
允许expression_list
的语法示例:
-
return
声明 -
yield
expression式 - (包括增加的作业 )
-
for
语句 。
对expression式进行 简化 ,为expression_list
简单和复合语句文档将告诉您在Python语法中使用expression_list
所有位置。
要避免含糊不清,还需要括号。
以下是两个不同的expression式…只是因为某些是“expression式列表”,不会导致您可能期望的expression式列表:)
(1, 2, 3) + (4, 5) # results in (1, 2, 3, 4, 5) because + does sequence.extend on the tuples 1, 2, 3 + 4, 5 # this results in (1, 2, 7, 5) because + adds the elements, since there were no parentheses to protect the separate tuples