web-dev-qa-db-fra.com

Pourquoi les virgules de fin sont-elles autorisées dans une liste?

Je suis curieux de savoir pourquoi dans Python une syntaxe de fin dans une liste est une syntaxe valide, et il semble que Python l'ignore

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

Cela a du sens quand il s'agit d'un tuple puisque ('a') et ('a',) sont deux choses différentes, mais dans des listes?

94
Burhan Khalid

Les principaux avantages sont que cela facilite la modification des listes multilignes et réduit l'encombrement des diffs.

En changeant:

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

à:

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

implique seulement un changement d'une ligne dans le diff:

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

Cela dépasse le diff multi-ligne plus déroutant lorsque la virgule de fin a été omise:

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

Ce dernier diff rend plus difficile de voir qu'une seule ligne a été ajoutée et que l'autre ligne n'a pas changé de contenu.

Cela réduit également le risque de le faire:

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

et déclenchant concaténation implicite de littéraux de chaîne , produisant s = ['manny', 'mo', 'jackroger'] au lieu du résultat souhaité.

163
Raymond Hettinger

C'est une convention syntaxique courante qui permet de mettre des virgules à la fin d'un tableau. Les langages tels que C et Java le permettent, et Python semble avoir adopté cette convention pour sa structure de liste de données. C'est particulièrement utile lors de la génération de code pour remplir une liste: il suffit de générer une séquence d'éléments et de virgules, inutile de considérer le dernier en tant que cas spécial qui ne devrait pas comporter de virgule à la fin.

31
Óscar López

Cela aide à éliminer un certain type de bug. Il est parfois plus clair d’écrire des listes sur plusieurs lignes . Mais lors d’une maintenance ultérieure, vous souhaiterez peut-être réorganiser les éléments.

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

# Now you want to rearrange

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

# Now you have an error

Mais si vous autorisez les virgules de fin et les utilisez, vous pouvez facilement réorganiser les lignes sans introduire d'erreur.

24
Keith

Un tuple est différent car ('a') est développé en utilisant la continuation implicite et ()s en tant qu'opérateur de précendence, alors que ('a',) fait référence à une longueur de 1 Tuple.

Votre exemple original aurait été Tuple('a')

3
richo

La raison principale est de rendre le diff moins compliqué ..__ Par exemple, vous avez une liste:

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

et vous voulez y ajouter un autre élément. Ensuite, vous finirez par faire ceci:

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

ainsi, diff montrera que deux lignes ont été modifiées, en ajoutant d'abord "," en ligne avec "c" et en ajoutant "d" à la dernière ligne.

Ainsi, python permet de mettre un ',' dans le dernier élément de la liste, pour éviter des différences supplémentaires qui pourraient prêter à confusion.

0
Nitish Chauhan