Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Pourquoi peut-on laisser une virgule après le dernier élément d'un tuple ?

+7 votes

Pour ma culture générale et parce que ça me titille : je vois partout qu'on laisse une virgule après la dernière application listée dans INSTALLED_APPS :

INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', # etc. 'mon_application', # <= là )

Vérification faite dans mon interpréteur, qui n'est pas plus choqué que ça :

x = ('machin', 'truc',)
(mais bon faut pas exagérer non plus ) :
y = (1, 2, 3,,) ... SyntaxError: invalid syntax
Si c'est bon pour Python c'est bon pour moi, mais ça me paraît bizarre d'accepter un dernier séparateur suivi par rien

demandé 18-Jan-2016 par noobien (158 points)

2 Réponses

+11 votes
 
Meilleure réponse

Cette regle n'est requise que pr les tuples d'un seul element: ('machin',) et ainsi, permettre au python de bien capter qu'il s'agit d'un tuple et pas d'une expression. Si ton tuple possede plus d'un element, meme sans la derniere virgule, il n'y aura aucun probleme.

répondu 18-Jan-2016 par Nsukami_ (1,998 points)
sélectionné 19-Jan-2016 par noobien

Ok, je l'ignorais ; oui en effet je comprends mieux dans le cas d'un tuple à un seul élément

Merci !

+11 votes

Comme c'est déjà dit, ça peut être nécessaire pour le tuple à 1 élément : var = (a,). Dans les autres cas, c'est autorisé mais ça ne change rien.

Mettre une dernière virgule est licite pour les tuples mais aussi les listes et les dictionnaires, et aussi les appels de fonctions.

Ca se combine d'ailleurs bien avec le fait qu'on puisse faire des retours à la ligne à l'intérieur de (), [] et {} :

ma_liste = [
    'machin',
    'truc',
    'bidule',
    'chouette',
]
mon_dict = {
    'machin': 1,
    'truc': 2,
    'bidule': 3,
    'chouette': 4,
}
resultat = ma_function(
    machin=1,
    truc=2,
    bidule=3,
    chouette=4,
)

Ce qui est sympa ici, c'est que toutes les lignes se ressemblent, pas besoin de penser au fait que la "chouette" est sur la dernière ligne, la dernière virgule ne change rien.

On peut aussi penser aux outils de gestion de version de code (git et autre).
Dans les exemples au dessus, rajouter une ligne ne change pas la ligne du dessus.

ma_liste = [
    'machin',
    'truc',
    'bidule',
    'chouette',
    'chose', # <= on l'avait oublié, on ne change pas la ligne du dessus
]
répondu 18-Jan-2016 par bubulle (2,248 points)

Ce serait bien pratique en SQL ; après des modifs dans un SELECT j'oublie toujours de virer la virgule à la fin du champ qui se retrouve en dernière position :)

Merci pour ces explications

...