Python元组尾随逗号语法规则

在单个元素元组的情况下,尾部的逗号是必需的。

a = ('foo',) 

那么多元素的元组呢? 看起来尾随的逗号是否存在,都是有效的。 它是否正确? 在我看来,后面的逗号更容易编辑。 这是一种糟糕的编码风格吗?

 a = ('foo1', 'foo2') b = ('foo1', 'foo2',) 

除了空元组之外,逗号都是重要的。 圆括号仅在需要其他语法原因时才需要:从一组函数参数,运算符优先级或允许换行符中区分元组。

元组,列表或函数参数的尾随逗号是很好的样式,特别是当你有一个长分割多行的初始化时。 如果你总是包含尾随逗号,那么你不会添加另一行到期望添加另一个元素,而只是创build一个有效的expression式:

 a = [ "a", "b" "c" ] 

假设从2个元素列表开始,后来被扩展了,那么在一个可能不是很明显的方式上出错了。 总是包含尾随的逗号,避免陷阱。

只有单项元组需要消除定义一个元组或括号括起来的expression式。

 (1) # the number 1 (the parentheses are wrapping the expression `1`) (1,) # a 1-tuple holding a number 1 

对于多个项目,不再需要,因为它清楚地表明它是一个元组。 但是,尾随的逗号允许使用多行来更容易地定义它们。 您可以添加到最后或重新排列项目,而不会违反语法,因为您在事故中遗漏了逗号。

例如,

 someBigTuple = ( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, #... 10000000000, ) 

请注意,这也适用于其他集合(例如,列表和词典),而不仅仅是元组。

尾随逗号的另一个优点是它使差异更好看。 如果你开始

 a = [ 1, 2, 3 ] 

并将其更改为

 a = [ 1, 2, 3, 4 ] 

差异看起来像

  a = [ 1, 2, - 3 + 3, + 4 ] 

而如果你以一个尾随的逗号开始,比如

 a = [ 1, 2, 3, ] 

然后差异就是

  a = [ 1, 2, 3, + 4, ] 

这是可选的:请参阅Python维基 。

简介:单元素元组需要一个尾随逗号 ,但是对于多元元组是可选的。

尾随逗号仅对于一元元组是必需的。 对于较大的元组有一个尾随的逗号是风格问题,并不是必需的。 它最大的优点是对多行修改的大元组(例如configuration元组)的文件进行干净的差异化处理。

存在的另一个原因是它使代码生成和__repr__函数更容易编写。 例如,如果你有一些像obj(arg1, arg2, ..., argn)那样构build的obj(arg1, arg2, ..., argn) ,那么你可以把obj.__repr__写成

 def __repr__(self): l = ['obj('] for arg in obj.args: # Suppose obj.args == (arg1, arg2, ..., argn) l.append(repr(arg)) l.append(', ') l.append(')') return ''.join(l) 

如果后面的逗号不被允许,则必须特别说明最后一个参数。 实际上,你可以使用列表理解来将上面的代码写在一行中(为了便于阅读,我写了更长的代码)。 要做到这一点并不是那么容易,如果你必须特殊情况下的最后一届。

这是一个简单的答案。

a =(“s”)是一个string

a =(“s”,)是一个元素的元组。

在一个元素元组的情况下,Python需要额外的逗号来区分string和元组。

例如,在python控制台上试试这个:

a =(“s”)

a = a +(1,2,3)

回溯(最近一次通话最后):

文件标准input,第1行,在模块中

TypeError:不能连接'str'和'tuple'对象

编码风格是你的口味,如果你认为编码标准问题有一个PEP-8可以指导你。

你怎么看下面的expression结果?

 x = (3) x = (3+2) x = 2*(3+2) 

是的,x只是一个数字。