160

Python では、リストの末尾のコンマが有効な構文である理由に興味があります。Python は単純にそれを無視しているようです。

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

('a')('a',)が 2 つの異なるものであるため、タプルである場合は理にかなっていますが、リストでは?

4

5 に答える 5

269

主な利点は、複数行のリストを編集しやすくすることと、差分の混乱を減らすことです。

変化:

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']し、意図した結果ではなく生成します。

于 2012-07-22T05:15:53.237 に答える
39

配列の末尾のコンマを許可するのは一般的な構文規則であり、C や Java などの言語では許可されており、Python はリスト データ構造にこの規則を採用しているようです。リストに入力するためのコードを生成する場合に特に便利です。要素とコンマのシーケンスを生成するだけで、最後のものを最後にコンマを付けない特別なケースと見なす必要はありません。

于 2012-07-22T05:14:29.157 に答える
35

特定の種類のバグを排除するのに役立ちます。複数の行にリストを書く方が明確な場合があります。ただし、後のメンテナンスで、アイテムを再配置する必要がある場合があります。

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

# Now you want to rearrange

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

# Now you have an error

ただし、末尾のコンマを許可して使用すると、エラーを発生させずに行を簡単に並べ替えることができます。

于 2012-07-22T05:18:53.917 に答える
6

長さ 1 のタプルを参照するのに対し、('a')暗黙の継続と()s を優先順位演算子として使用して展開されるため、タプルは異なります。('a',)

あなたの元の例はtuple('a')

于 2012-07-22T05:24:35.987 に答える
3

主な理由は、diff の複雑さを軽減することです。たとえば、リストがあります:

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

それに別の要素を追加したいとします。次に、これを行うことになります:

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

したがって、diff は 2 行が変更されたことを示します。最初に 'c' の行に ',' を追加し、最後の行に 'd' を追加します。

そのため、python では、リストの最後の要素に末尾の「,」を使用して、混乱を引き起こす可能性のある余分な diff を防ぐことができます。

于 2018-04-15T16:59:11.127 に答える