web-dev-qa-db-ja.com

リストで末尾のコンマが許可されるのはなぜですか?

なぜPythonリストの末尾のコンマが有効な構文であり、Pythonは単に無視するようです:

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

('a')および('a',)は2つの異なるものですが、リストにありますか?

114
Burhan Khalid

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

変化:

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

に:

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

差分の1行の変更のみが含まれます。

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

これは、末尾のコンマが省略されたときに、より複雑な複数行のdiffに勝ります:

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

後者の差分により、1行のみが追加され、他の行がコンテンツを変更しなかったことがわかりにくくなります。

また、これを行うリスクを減らします。

s = ['manny',
     'mo',
     'jack'
     'roger'  # Added this line, but forgot to add a comma on the previous line
]

暗黙の文字列リテラル連結 をトリガーし、意図した結果の代わりにs = ['manny', 'mo', 'jackroger']を生成します。

181

配列の末尾のコンマを許可する一般的な構文規則です。CやJavaなどの言語)、およびPythonはこの規則をリストに採用しているようですデータ構造:リストを生成するためのコードを生成するときに特に役立ちます:要素とコンマのシーケンスを生成するだけで、最後のコンマを末尾にコンマを付けてはならない特殊なケースと見なす必要はありません。

31
Óscar López

特定の種類のバグを排除するのに役立ちます。リストを複数行に記述する方が明確な場合があります。ただし、後でメンテナンスを行う場合は、アイテムを並べ替えることができます。

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

# Now you want to rearrange

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

# Now you have an error

ただし、末尾のコンマを許可して使用すると、エラーを発生させずに行を簡単に再配置できます。

24
Keith

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

元の例はTuple('a')でした

3
richo

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

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

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

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

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

したがって、pythonは、リストの最後の要素で末尾の '、'を許可し、混乱を引き起こす余分なdiffを防ぎます。

0
Nitish Chauhan