为什么Python允许列表中的尾随逗号?
我很好奇为什么在Python中,列表中尾随的逗号是有效的语法,似乎Python简单地忽略它:
>>> ['a','b',] ['a', 'b']
从('a')
和('a',)
的元组是两个不同的东西,但是在列表中是有意义的。
主要优点是它使多行列表更容易编辑,并减less了差异的混乱。
更改:
s = ['manny', 'mo', 'jack', ]
至:
s = ['manny', 'mo', 'jack', 'roger', ]
在差异中只涉及一个单行的变化:
s = ['manny', 'mo', 'jack', + 'roger', ]
当尾随的逗号被省略时,这比较令人困惑的多行比较:
s = ['manny', 'mo', - 'jack' + 'jack', + 'roger' ]
后面的diff使得难以看到只有一行被添加,而另一行没有改变内容。
允许在数组中使用尾随逗号是一种常见的语法规则,像C和Java这样的语言允许它,而且Python似乎已经采用了这个约定来处理它的列表数据结构。 生成填充列表的代码时特别有用:只需生成一系列元素和逗号,而不需要将最后一个视为最后没有逗号的特殊情况。
它有助于消除某种types的错误。 在多行上写清单有时更清晰。 但是,在稍后的维护中,您可能需要重新排列项目。
l1 = [ 1, 2, 3, 4, 5 ] # Now you want to rearrange l1 = [ 1, 2, 3, 5 4, ] # Now you have an error
但是,如果允许尾随逗号,并使用它们,则可以轻松地重新排列行,而不会引入错误。
一个元组是不同的,因为('a')
是用隐式延拓和()
作为优先运算符来扩展的,而('a',)
是指长度为1的元组。
你最初的例子是tuple('a')