什么时候围绕一个元组需要括号?

wim*_*wim 42 python syntax tuples

是否有一个参考某处确定何时用括号括起元组是否需要?

这是最近让我感到惊讶的一个例子:

>>> d = {}
>>> d[0,] = 'potato'
>>> if 0, in d:
  File "<stdin>", line 1
    if 0, in d:
        ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

eca*_*mur 42

使用逗号标记创建元组的表达式组合称为expression_list.运算符优先级的规则不包括表达式列表; 这是因为表达式列表本身不是表达式; 它们在括在括号中时成为表达式.

因此,expression_list在Python中的任何地方都允许使用未被封闭的语言语法特别允许的语言,而不是expression需要的地方.

例如,if语句的语法如下:

if_stmt ::=  "if" expression ":" suite
             ( "elif" expression ":" suite )*
             ["else" ":" suite]
Run Code Online (Sandbox Code Playgroud)

由于expression引用了生产,expression_list因此不允许未公开的作为if声明的主题.但是,for语句接受expression_list:

for_stmt ::=  "for" target_list "in" expression_list ":" suite
              ["else" ":" suite]
Run Code Online (Sandbox Code Playgroud)

所以允许以下内容:

for x in 1, 2, 3:
    print(x)
Run Code Online (Sandbox Code Playgroud)

  • +1这肯定解释了为什么`对于k,在d`中起作用(因为`对于k,对于d'有效). (2认同)

Mar*_*ers 13

在允许您使用该expression_list术语的任何地方,您不需要使用括号.

if声明需要一个expression,并且不支持expression_list.

允许的语法示例expression_list:

Grepping 表达式,SimpleCompound语句文档expression_list将告诉您expression_listPython语法中使用的所有位置.

  • @smci 抱歉,但是“1,2,7,5”*正是*我所期望的。逗号之间的每个部分都是一个表达式;整个是一个“表达式列表”。不存在对表达式列表求和的语法规则;相反,“+”是所包含表达式之一(“3 + 4”)的一部分。要添加两个元组,请通过添加括号来创建两个单独的表达式。 (2认同)