Quelle est la syntaxe de la règle pour avoir des virgules dans tuple définitions?
Dans le cas d'un seul élément d'un tuple, la virgule est nécessaire.
a = ('foo',)
Un tuple avec plusieurs éléments? Il semble que si la virgule existe ou pas, ils sont tous les deux valides. Est-ce correct? Avoir une virgule est plus facile pour l'édition, à mon avis. C'est qu'un mauvais style de codage?
a = ('foo1', 'foo2')
b = ('foo1', 'foo2',)
- Voici la syntaxe de la règle: docs.python.org/reference/expressions.html#expression-lists
Vous devez vous connecter pour publier un commentaire.
Dans tous les cas, sauf le vide tuple de la virgule est le plus important. Les parenthèses sont nécessaires uniquement lorsque nécessaire pour d'autres raisons syntaxiques: pour distinguer un tuple à partir d'un ensemble d'arguments de la fonction, la priorité de l'opérateur, ou pour permettre des sauts de ligne.
La virgule pour les tuples, listes, ou des arguments de la fonction est de bon ton, surtout lorsque vous avez une longue initialisation qui est répartie sur plusieurs lignes. Si vous avez toujours inclure une virgule, alors vous ne pas ajouter une autre ligne à la fin, s'attendant à ajouter un autre élément et, au lieu de simplement créer une expression valide:
En supposant que commencé comme un 2 de l'élément de la liste qui a été étendu par la suite il a mal tourné dans un peut-être pas immédiatement évident. Toujours inclure la virgule et vous éviter ce piège.
Il n'est nécessaire que pour un seul élément de n-uplets de lever l'ambiguïté de la définition d'un tuple ou une expression entouré par des parenthèses.
Pour plus d'un élément, il n'est plus nécessaire car il est parfaitement clair qu'il est un n-uplet. Cependant, la virgule n'est autorisé à les définir à l'aide de plusieurs lignes de plus facile. Vous pouvez ajouter à la fin ou réorganiser les éléments sans casser la syntaxe parce que vous avez omis une virgule de l'accident.
par exemple,
Notez que cela s'applique à d'autres collections (par exemple, les listes et les dictionnaires) trop et pas seulement des n-uplets.
key: value,
par ligne, et de ne pas prendre soin de virgule lors de l'ajout de nouvelles choses.Un autre avantage de virgules, c'est qu'il fait des diff look plus agréable. Si vous avez commencé avec
et cela a changé
La diff ressemblerait
Alors que si vous aviez commencé par une virgule, comme
Alors la diff serait juste
C'est facultatif: voir le Python wiki.
Résumé: un seul élément de n-uplets besoin d'une virgule, mais c'est facultatif pour les multi-élément n-uplets.
Aussi, considérons une situation où vous voulez:
Donc dans ce cas à l'extérieur des parenthèses ne sont rien de plus que le groupement des parenthèses.
Pour les rendre tuple vous avez besoin d'ajouter une virgule. c'est à dire
Virgule est nécessaire pour un élément de n-uplets seulement. Avoir une virgule pour les plus grands tuples est une affaire de style et n'est pas nécessaire. Son plus grand avantage est propre diff sur des fichiers avec multi-ligne à grande tuples qui sont souvent modifiées (par exemple, la configuration des n-uplets).
C'est une réponse simple.
un = ("s") est une chaîne
et
un = ("s") est un tuple avec un seul élément.
Python besoins supplémentaires de virgule dans le cas d'un élément d'un tuple à, de faire la différence entre la chaîne et la n-uplet.
Par exemple, essayez ceci sur la console python:
un = ("s")
un = un + (1,2,3)
Traceback (most recent call last):
Fichier stdin, ligne 1, dans le module
TypeError: ne peut pas concaténer 'str' et 'tuple' objets
Une autre raison que cela existe, c'est qu'il permet la génération de code et
__repr__
fonctions plus facile à écrire. Par exemple, si vous avez un objet qui est construit commeobj(arg1, arg2, ..., argn)
, alors vous pouvez simplement écrireobj.__repr__
commeSi une virgule n'était pas autorisé, vous devez le cas particulier de la dernière argument. En fait, vous pouvez écrire le ci-dessus dans un ligne à l'aide d'une compréhension de liste (je l'ai écrit plus pour le rendre plus facile à lire). Il ne serait pas si facile de le faire que si vous aviez à le cas particulier de la dernière législature.
join
dans ce cas:def __repr__(self): 'obj(' + ', '.join([repr(arg) for arg in obj.args]) + ')'
.join
.PEP 8 -- Guide de Style pour le Code Python - Quand Utiliser des Virgules
Virgules sont généralement facultative, sauf qu'ils sont obligatoires lors de la prise d'un n-uplet d'un élément (et en Python 2, ils ont de la sémantique pour l'instruction print). Pour plus de clarté, il est recommandé d'entourer ce dernier dans (techniquement redondant) les parenthèses.
Oui:
OK, mais à confusion:
Lorsque les virgules sont redondants, ils sont souvent utiles lorsqu'un système de contrôle de version est utilisée, lorsqu'une liste de valeurs, des arguments ou des éléments importés devrait être étendu au fil du temps. Le modèle est de mettre chaque valeur (etc.) sur une ligne par lui-même, toujours à l'ajout d'une virgule et ajouter à la fin de parenthèse/crochet/accolade sur la ligne suivante. Cependant, il n'est pas logique d'avoir une virgule sur la même ligne que la fermeture de délimiteur (sauf dans le cas ci-dessus de singleton tuples).
Oui:
Pas:
Style de codage est à votre goût, Si vous pensez que norme de codage des questions il y a un PEP-8 Qui peuvent vous guider.
Que pensez-vous du résultat de l'expression suivante?
Yep, x est juste un nombre.