我很好奇,为什么在Python列表中的一个逗号后是有效的语法,它似乎是Python的简单地忽略它:
>>> ['a','b',]
['a', 'b']
这是有道理的,当它从一个元组('a')
和('a',)
是两个不同的东西,但在名单?
我很好奇,为什么在Python列表中的一个逗号后是有效的语法,它似乎是Python的简单地忽略它:
>>> ['a','b',]
['a', 'b']
这是有道理的,当它从一个元组('a')
和('a',)
是两个不同的东西,但在名单?
主要优点是,它使多行列出容易编辑,并且它减少的diff混乱。
更改:
s = ['manny',
'mo',
'jack',
]
至:
s = ['manny',
'mo',
'jack',
'roger',
]
只涉及在DIFF单行变化:
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
]
和触发隐字符串文字级联 ,产生s = ['manny', 'mo', 'jackroger']
代替预期的结果。
这是一个常见的语法惯例,允许在一个阵列尾随逗号,像C和Java语言允许它和Python似乎已经采用了这种约定的列表数据结构。 用于填充列表生成代码时,这是特别有用:刚才生成的元素和逗号的序列,不需要考虑最后一个为不应该在最后一个逗号的特殊情况。
它可以帮助消除某种错误的。 它有时更清晰的写在多行名单。 但是,后来维护支持你可能要重新安排的项目。
l1 = [
1,
2,
3,
4,
5
]
# Now you want to rearrange
l1 = [
1,
2,
3,
5
4,
]
# Now you have an error
但是,如果你允许尾随逗号,并使用它们,您可以轻松地重新排列线而没有引入错误。
因为元组是不同的('a')
使用隐式继续被膨胀和()
S作为precendence运营商,而('a',)
是指长度为1的元组。
你原来的例子会一直tuple('a')
最主要的原因是使DIFF那么复杂。 例如你有一个清单:
list = [
'a',
'b',
'c'
]
并且要到另一个元素添加进去。 然后,你会落得这样做:
list = [
'a',
'b',
'c',
'd'
]
因此,差异将显示两行已被改变,第一相加在与‘c’线“”并添加在最后一行‘d’。
因此,Python允许在列表的最后一个元素后“”,以防止多余的差异可以导致混乱。