对于单个元素元组,需要后面的逗号。
a = ('foo',)
具有多个元素的元组怎么样?似乎不管后面的逗号是否存在,它们都是有效的。是这样吗?在我看来,后面加个逗号更容易编辑。这是一种糟糕的编码风格吗?
a = ('foo1', 'foo2') b = ('foo1', 'foo2',)
只有一个元素元组需要尾随逗号。在较大的元组后面加一个逗号是一个风格问题,不是必需的。它最大的优点是对经常被修改的多行大元组(例如,配置元组)的文件进行清除 diff。
只有单项元组才需要消除定义元组或括号包围的表达式的歧义。
(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 = [ "a", "b" "c" ]
假设一开始是一个2元素列表,后来又扩展了,那么它可能以一种并不明显的方式出错了。总是在后面加逗号,这样就避免了陷阱。
它是可选的: 参见 Python 维基百科。
简介: 单元素元组 需要一个后面的逗号,但它是多元素元组 可以选择。
编码风格是你的口味,如果你认为编码标准很重要,有一个 PEP-8可以指导你。
你觉得下面这个表达式的结果怎么样?
x = (3) x = (3+2) x = 2*(3+2)
是的,X 只是一个数字。
这样做的另一个原因是,它使代码生成和 __repr__函数更容易编写。例如,如果您有一些类似于 obj(arg1, arg2, ..., argn)的对象,那么您可以将 obj.__repr__写成
__repr__
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 = [ 1, 2, 3 ]
然后改成了
a = [ 1, 2, 3, 4 ]
差速器看起来像
a = [ 1, 2, - 3 + 3, + 4 ]
但是如果你用逗号开头,比如
a = [ 1, 2, 3, ]
那么区别就在于
a = [ 1, 2, 3, + 4, ]
答案很简单。
a = ("s")是一个字符串
a = ("s")
还有
a = ("s",)是一个只有一个元素的元组。
a = ("s",)
对于一个元素 tuple,Python 需要一个额外的逗号来区分 string 和 tuple。
例如,在 python 控制台上尝试这样做:
a = ("s") a = a + (1,2,3) Traceback (most recent call last): File stdin, line 1, in module TypeError: cannot concatenate 'str' and 'tuple' objects
此外,考虑一下你想要的情况:
>>> (('x','y'))*4 # same as ('x','y')*4 ('x', 'y', 'x', 'y', 'x', 'y', 'x', 'y') #Expected = (('x', 'y'), ('x', 'y'), ('x', 'y'), ('x', 'y'))
所以在这种情况下,外括号只不过是分组的括号。 为了使它们成为元组,您需要在后面添加一个逗号。
>>> (('x','y'),)*4 (('x', 'y'), ('x', 'y'), ('x', 'y'), ('x', 'y'))
PEP8-Python 代码的样式指南-何时使用尾随逗号
后面的逗号通常是可选的,除了在创建由一个元素组成的元组时它们是强制的(在 Python 2中,它们对 print 语句具有语义)。为了清楚起见,建议将后者放在(技术上多余的)括号中。
是的:
FILES = ('setup.cfg',)
好吧,但是让人困惑的是:
FILES = 'setup.cfg',
当尾随逗号是多余的时候,当使用版本控制系统时,当值、参数或导入项的列表需要随着时间的推移而扩展时,它们通常是有帮助的。这种模式是将每个值(等等)单独放在一行上,总是添加一个后面的逗号,并在下一行中添加括号/括号/括号。然而,在结束分隔符的同一行上有一个后面的逗号是没有意义的(除了在上面的单元组的情况)。
FILES = [ 'setup.cfg', 'tox.ini', ] initialize(FILES, error=True, )
答案是否定的:
FILES = ['setup.cfg', 'tox.ini',] initialize(FILES, error=True,)