161 votes

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

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

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

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

272voto

Raymond Hettinger Points 231

Ses principaux avantages sont de faciliter l'édition des listes de plusieurs lignes et de réduire le désordre dans les diffs.

Changement :

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

à :

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

n'implique qu'un changement d'une ligne dans le diff :

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

C'est mieux que la différence sur plusieurs lignes, plus confuse, lorsque la virgule de fin était omise :

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

Cette dernière différence rend plus difficile de voir qu'une seule ligne a été ajoutée et que l'autre ligne n'a pas changé de contenu.

Il 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 le déclenchement concaténation implicite de chaînes de caractères , produisant s = ['manny', 'mo', 'jackroger'] au lieu du résultat escompté.

40voto

Óscar López Points 97105

C'est une convention syntaxique courante que d'autoriser les virgules de fin dans un tableau, des langages comme C et Java le permettent, et Python semble avoir adopté cette convention pour sa structure de données liste. C'est particulièrement utile lorsqu'on génère du code pour remplir une liste : il suffit de générer une séquence d'éléments et de virgules, sans avoir besoin de considérer le dernier comme un cas spécial qui ne devrait pas avoir de virgule à la fin.

35voto

Keith Points 13800

Il aide à éliminer un certain type d'insecte. Il est parfois plus clair d'écrire les listes sur plusieurs lignes. Mais dans le cadre d'une maintenance ultérieure, vous pouvez souhaiter 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 que vous les utilisez, vous pouvez facilement réorganiser les lignes sans introduire d'erreur.

6voto

richo Points 3238

Un tuple est différent parce que ('a') est développé en utilisant la continuation implicite et () en tant qu'opérateur de précendance, tandis que ('a',) fait référence à un tuple de longueur 1.

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

4voto

Nitish Chauhan Points 54

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. Alors vous finirez par faire ceci :

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

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

Ainsi, python autorise la terminaison ',' dans le dernier élément d'une liste, afin d'éviter les différences supplémentaires qui peuvent prêter à confusion.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X