Python 元组定义中有尾随逗号的语法规则是什么?
对于单个元素元组,后面的逗号是必需的Python 元组定义中有尾随逗号的语法规则是什么?,python,syntax,tuples,Python,Syntax,Tuples,对于单个元素元组,后面的逗号是必需的 a = ('foo',) 有多个元素的元组呢?不管后面的逗号是否存在,它们都是有效的。这是正确的吗?在我看来,后面加逗号更容易编辑。这是一种糟糕的编码风格吗 a = ('foo1', 'foo2') b = ('foo1', 'foo2',) 只有一个元素元组需要尾随逗号。对于较大的元组,尾随逗号是一个样式问题,不是必需的。它最大的优点是在具有经常修改的多行大型元组(例如配置元组)的文件上使用干净的差异。只有一个元素元组需要尾随逗号。对于较大的元组,尾随
a = ('foo',)
有多个元素的元组呢?不管后面的逗号是否存在,它们都是有效的。这是正确的吗?在我看来,后面加逗号更容易编辑。这是一种糟糕的编码风格吗
a = ('foo1', 'foo2')
b = ('foo1', 'foo2',)
只有一个元素元组需要尾随逗号。对于较大的元组,尾随逗号是一个样式问题,不是必需的。它最大的优点是在具有经常修改的多行大型元组(例如配置元组)的文件上使用干净的差异。只有一个元素元组需要尾随逗号。对于较大的元组,尾随逗号是一个样式问题,不是必需的。它最大的优点是在具有经常修改的多行大型元组(例如,配置元组)的文件上具有清晰的差异。只需要单个项元组就可以消除定义元组或由括号包围的表达式的歧义
(1) # the number 1 (the parentheses are wrapping the expression `1`)
(1,) # a 1-tuple holding a number 1
对于不止一个项,它不再是必需的,因为很明显它是一个元组。但是,允许使用尾随逗号,以便更轻松地使用多行定义它们。您可以在不破坏语法的情况下添加到末尾或重新排列项目,因为您在意外事件中漏掉了逗号
e、 g
请注意,这也适用于其他集合(例如列表和字典),而不仅仅是元组。只有单项元组才需要消除定义元组或由括号包围的表达式的歧义
(1) # the number 1 (the parentheses are wrapping the expression `1`)
(1,) # a 1-tuple holding a number 1
对于不止一个项,它不再是必需的,因为很明显它是一个元组。但是,允许使用尾随逗号,以便更轻松地使用多行定义它们。您可以在不破坏语法的情况下添加到末尾或重新排列项目,因为您在意外事件中漏掉了逗号
e、 g
请注意,这也适用于其他集合(例如列表和字典),而不仅仅是元组。在除空元组以外的所有情况下,逗号都很重要。只有在出于其他语法原因需要时才需要括号:将元组与一组函数参数区分开来、运算符优先级或允许换行 元组、列表或函数参数的尾随逗号是一种很好的样式,特别是当您有一个长的初始化,并拆分为多行时。如果始终包含一个尾随逗号,则不会在末尾添加另一行,希望添加另一个元素,而只是创建一个有效的表达式:
a = [
"a",
"b"
"c"
]
假设一开始是一个2元素的列表,后来又扩展了它,那么它可能会以一种不太明显的方式出错。始终包含后面的逗号,这样就避免了这个陷阱。在所有情况下,除了空元组,逗号都是重要的。只有在出于其他语法原因需要时才需要括号:将元组与一组函数参数区分开来、运算符优先级或允许换行 元组、列表或函数参数的尾随逗号是一种很好的样式,特别是当您有一个长的初始化,并拆分为多行时。如果始终包含一个尾随逗号,则不会在末尾添加另一行,希望添加另一个元素,而只是创建一个有效的表达式:
a = [
"a",
"b"
"c"
]
假设一开始是一个2元素的列表,后来又扩展了它,那么它可能会以一种不太明显的方式出错。始终包含尾随逗号,这样可以避免该陷阱。这是可选的:请参阅
摘要:单元素元组需要一个尾随逗号,但对于多元素元组它是可选的。它是可选的:请参阅
摘要:单元素元组需要一个尾随逗号,但对于多元素元组,它是可选的。如果您认为编码标准很重要,那么编码风格就是您的喜好,有一个标准可以指导您 你觉得下面这个表达式的结果如何
x = (3)
x = (3+2)
x = 2*(3+2)
是的,x只是一个数字。编码风格是你的品味,如果你认为编码标准很重要,那么有一个标准可以指导你 你觉得下面这个表达式的结果如何
x = (3)
x = (3+2)
x = 2*(3+2)
是的,x只是一个数字。存在这种情况的另一个原因是它使代码生成和
\uuuu repr\uuu
函数更容易编写。例如,如果您有一个像obj(arg1,arg2,…,argn)
那样构建的对象,那么您可以将obj.\uu repr\uu
作为
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)
如果不允许使用尾随逗号,则必须对最后一个参数使用特殊情况。事实上,您可以使用列表理解将上述内容写在一行中(为了便于阅读,我将其写得更长)。如果在上一个术语中必须使用特殊情况,那么这样做就不那么容易了。存在这种情况的另一个原因是它使代码生成和
\uuuu repr\uu
函数更容易编写。例如,如果您有一个像obj(arg1,arg2,…,argn)
那样构建的对象,那么您可以将obj.\uu repr\uu
作为
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 = [
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”)
是一个字符串
及