Answers:
在所有情况下,除了空的元组,逗号都是重要的事情。仅在出于其他语法原因而需要时才需要括号:将元组与一组函数参数,运算符优先级区分开或允许换行。
元组,列表或函数参数的尾部逗号是一种不错的样式,尤其是当您有一个较长的初始化并分为多行时。如果始终包含尾随逗号,则不会在末尾添加任何行,而期望添加另一个元素,而只是创建一个有效的表达式:
a = [
"a",
"b"
"c"
]
假设它最初是一个2元素列表,后来又进行了扩展,那么它可能以一种可能并不立即显而易见的方式出错了。始终包含结尾逗号,这样可以避免出现陷阱。
只有单项元组才需要消除定义元组或由括号包围的表达式的歧义。
(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,
)
请注意,这也适用于其他集合(例如列表和字典),而不仅仅是元组。
key: value,
每行只有一个非常有用,并且在添加新内容时不会用逗号打扰。
它是可选的:请参阅Python Wiki。
简介:单元素元组需要结尾逗号,但是对于多元素元组是可选的。
仅尾元素元组才需要尾随逗号。对于较大的元组,用逗号结尾是一个样式问题,并非必需。它的最大优点是对带有经常修改的多行大元组(例如配置元组)的文件进行完全比较。
存在的另一个原因是它使代码生成和__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)
如果不允许使用逗号结尾,则必须对最后一个参数进行特殊处理。实际上,您可以使用列表理解将上述内容写在一行中(我将其写得更长一些,以便于阅读)。如果上学期不得不特殊情况,要做到这一点并非易事。
join
在这种情况下使用即可def __repr__(self): 'obj(' + ', '.join([repr(arg) for arg in obj.args]) + ')'
。
join
。
尾部的逗号通常是可选的,但当组成一个元素的元组时它们是必需的(并且在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,)