为什么列表中允许使用尾随逗号?
- 2025-02-27 09:06:00
- admin 原创
- 52
问题描述:
我很好奇为什么在 Python 中列表尾随逗号是有效语法,但 Python 似乎只是忽略了它:
>>> ['a','b',]
['a', 'b']
当它是一个元组时,这是有意义的,因为('a')
和('a',)
是两个不同的东西,但是在列表中呢?
解决方案 1:
主要优点是它使多行列表更易于编辑并且减少了差异中的混乱。
更改:
s = ['manny',
'mo',
'jack',
]
到:
s = ['manny',
'mo',
'jack',
'roger',
]
仅涉及 diff 中的一行更改:
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']
预期的结果。
解决方案 2:
允许数组末尾有逗号是一种常见的语法惯例,C 和 Java 等语言也允许这样做,Python 似乎也在其列表数据结构中采用了此惯例。在生成用于填充列表的代码时,这尤其有用:只需生成一系列元素和逗号,无需将最后一个元素视为特殊情况(末尾不应有逗号)。
解决方案 3:
它有助于消除某种类型的错误。有时将列表写在多行上会更清楚。但在以后的维护中,您可能需要重新排列这些项目。
l1 = [
1,
2,
3,
4,
5
]
# Now you want to rearrange
l1 = [
1,
2,
3,
5
4,
]
# Now you have an error
但是如果您允许使用尾随逗号并使用它们,您可以轻松地重新排列行而不会引入错误。
解决方案 4:
元组有所不同,因为('a')
它使用隐式延续和()
s 作为优先级运算符进行扩展,而('a',)
指的是长度为 1 的元组。
你原来的例子应该是tuple('a')
解决方案 5:
主要原因是为了让 diff 不那么复杂。例如你有一个列表:
list = [
'a',
'b',
'c'
]
并且你想添加另一个元素。那么你最终会这样做:
list = [
'a',
'b',
'c',
'd'
]
因此,diff 将显示两行已被更改,首先在“c”行中添加“,”并在最后一行添加“d”。
因此,python 允许在列表的最后一个元素后面加上“,”以防止造成混淆的额外差异。
解决方案 6:
使得将元素放在末尾变得更容易。
例如,
a = [1,2,3]
现在你可能会错误地
a = [1,2,3 4] #SyntaxError
通过添加尾随逗号:
您第一次尝试就能消除这个问题。
每次添加新元素时,无需添加逗号。
扫码咨询,免费领取项目管理大礼包!