Python では、リストの末尾のコンマが有効な構文である理由に興味があります。Python は単純にそれを無視しているようです。
>>> ['a','b',]
['a', 'b']
('a')
と('a',)
が 2 つの異なるものであるため、タプルである場合は理にかなっていますが、リストでは?
主な利点は、複数行のリストを編集しやすくすることと、差分の混乱を減らすことです。
変化:
s = ['manny',
'mo',
'jack',
]
に:
s = ['manny',
'mo',
'jack',
'roger',
]
diff での変更は 1 行のみです。
s = ['manny',
'mo',
'jack',
+ 'roger',
]
これは、末尾のコンマが省略された場合の、より紛らわしい複数行の diff よりも優れています。
s = ['manny',
'mo',
- 'jack'
+ 'jack',
+ 'roger'
]
後者の差分では、追加されたのは 1 行だけで、もう 1 行は内容が変更されていないことがわかりにくくなっています。
また、これを行うリスクを軽減します。
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
ただし、末尾のコンマを許可して使用すると、エラーを発生させずに行を簡単に並べ替えることができます。
長さ 1 のタプルを参照するのに対し、('a')
暗黙の継続と()
s を優先順位演算子として使用して展開されるため、タプルは異なります。('a',)
あなたの元の例はtuple('a')
主な理由は、diff の複雑さを軽減することです。たとえば、リストがあります:
list = [
'a',
'b',
'c'
]
それに別の要素を追加したいとします。次に、これを行うことになります:
list = [
'a',
'b',
'c',
'd'
]
したがって、diff は 2 行が変更されたことを示します。最初に 'c' の行に ',' を追加し、最後の行に 'd' を追加します。
そのため、python では、リストの最後の要素に末尾の「,」を使用して、混乱を引き起こす可能性のある余分な diff を防ぐことができます。