为什么列表中允许使用尾随逗号?

时间:2012-07-22 05:11:30

标签: python list syntax comma trailing

我很好奇为什么在Python中列表中的尾随逗号是有效的语法,而且似乎Python只是忽略它:

>>> ['a','b',]
['a', 'b']

因为('a')('a',)是两个不同的东西,但在列表中它是一个元组是否有意义?

5 个答案:

答案 0 :(得分:173)

主要优点是它使多行列表更易于编辑,并且减少了差异中的混乱。

更改:

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
]

并触发implicit string literal concatenation,生成s = ['manny', 'mo', 'jackroger']而非预期结果。

答案 1 :(得分:31)

允许在数组中使用尾随逗号是一种常见的语法约定,C和Java等语言允许它,并且Python似乎已将此约定用于其列表数据结构。在生成用于填充列表的代码时,它特别有用:只需生成一系列元素和逗号,不需要将最后一个视为特殊情况,最后不应该使用逗号。

答案 2 :(得分:24)

它有助于消除某种错误。在多行上写清单有时更清楚。 但在以后的维护中你可能想重新排列这些项目。

l1 = [
        1,
        2,
        3,
        4,
        5
]

# Now you want to rearrange

l1 = [
        1,
        2,
        3,
        5
        4,
]

# Now you have an error

但是如果您允许使用尾随逗号并使用它们,则可以轻松地重新排列这些行而不会引入错误。

答案 3 :(得分:3)

元组是不同的,因为('a')使用隐式延续和() s作为优先运算符进行扩展,而('a',)指的是长度为1元组。

您的原始示例应为tuple('a')

答案 4 :(得分:0)

主要原因是使diff变得不那么复杂。 例如,您有一个列表:

list = [
    'a',
    'b',
    'c'
]

并且您想要为其添加另一个元素。然后你最终会这样做:

list = [
    'a',
    'b',
    'c',
    'd'
]

因此,差异将显示两条线已被更改,首先添加','符合' c'并添加' d'在最后一行。

因此,python允许尾随''在列表的最后一个元素中,以防止可能导致混淆的额外差异。