问题:为什么列表中允许尾随逗号?
我很好奇为什么在Python中列表中的尾部逗号是有效的语法,并且似乎Python只是忽略了它:
>>> ['a','b',]
['a', 'b']
自从('a')
和('a',)
是两个元组时,它是一个有意义的元组,但是在列表中呢?
回答 0
主要优点是,它使多行列表更易于编辑,并减少了差异。
变更:
s = ['manny',
'mo',
'jack',
]
至:
s = ['manny',
'mo',
'jack',
'roger',
]
仅涉及差异的单行更改:
s = ['manny',
'mo',
'jack',
+ 'roger',
]
当省略尾部逗号时,这击败了更令人困惑的多行差异:
s = ['manny',
'mo',
- 'jack'
+ 'jack',
+ 'roger'
]
后者的差异使得很难看到仅添加了一行,而另一行没有更改内容。
它还降低了这样做的风险:
s = ['manny',
'mo',
'jack'
'roger' # Added this line, but forgot to add a comma on the previous line
]
并触发隐式字符串文字串联,产生s = ['manny', 'mo', 'jackroger']
而不是预期的结果。
回答 1
这是一种常见的语法约定,允许在数组中尾随逗号,C和Java之类的语言都允许,并且Python似乎已对其列表数据结构采用了该约定。在生成用于填充列表的代码时,它特别有用:只需生成一系列元素和逗号,而无需将最后一个元素和逗号视为特殊情况,并且不应该在末尾加逗号。
回答 2
它有助于消除某种错误。有时在多行上写列表会更清晰。但是在以后的维护中,您可能需要重新排列项目。
l1 = [
1,
2,
3,
4,
5
]
# Now you want to rearrange
l1 = [
1,
2,
3,
5
4,
]
# Now you have an error
但是,如果允许使用尾随逗号,则可以轻松地重新排列行而不会引起错误。
回答 3
元组的不同之处在于,('a')
它使用隐式连续和()
s作为优先运算符进行扩展,而('a',)
引用长度为1的元组。
你原来的例子是 tuple('a')
回答 4
主要原因是使diff变得不那么复杂。例如,您有一个列表:
list = [
'a',
'b',
'c'
]
并且您想要向其中添加另一个元素。然后,您将最终执行此操作:
list = [
'a',
'b',
'c',
'd'
]
因此,diff将显示出两行已更改,首先在’c’处添加’,’,在最后一行添加’d’。
因此,python允许在列表的最后一个元素中尾部加上’,’,以防止可能引起混淆的额外差异。