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?
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é.
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.
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.
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')
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.