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

2024-04-20 14:33:30 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

当它的元组因为('a')('a',)是两个不同的东西而在列表中时,这是有意义的吗?


Tags: 列表语法意义元组逗号
3条回答

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

更改:

s = ['manny',
     'mo',
     'jack',
]

致:

s = ['manny',
     'mo',
     'jack',
     'roger',
]

只涉及一行的差异:

  s = ['manny',
       'mo',
       'jack',
+      'roger',
  ]

当省略尾随逗号时,这比更混乱的多行diff要好:

  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'],而不是预期的结果。

它有助于消除某种错误。有时在多行上写列表会更清楚。 但是在以后的维护中,您可能需要重新排列项目。

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

# Now you want to rearrange

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

# Now you have an error

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

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

相关问题 更多 >