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只是一个数字。