398 votes

Pourquoi n’y a-t-il pas de compréhension tuple en Python ?

Comme nous le savons, il n’y a la compréhension de liste, comme

et il y a compréhension du dictionnaire, comme

mais

se retrouveront dans un générateur, pas un `` compréhension. Pourquoi ?

Ma conjecture est qu’un `` est immuable, mais cela ne semble pas être la réponse.

567voto

Martijn Pieters Points 271458

Vous pouvez utiliser une expression de générateur :

mais entre parenthèses ont été déjà prises... expressions de générateur.

88voto

chepner Points 54078

Raymond Hettinger (l'un des Python les développeurs du noyau) avait ceci à dire au sujet de tuples dans un tweet récent:

#python conseil:en Général, les listes sont pour le bouclage; tuples pour les structures. Les listes sont homogènes; les tuples hétérogène.Les listes de longueur variable.

Ce (pour moi) soutient l'idée que si les éléments d'une séquence sont liées suffisant pour être généré par un, bien, générateur, puis il devrait y avoir une liste. Bien que d'un n-uplet est itératif et semble être tout simplement une liste immuable, c'est vraiment le Python équivalent d'une structure C:

struct {
    int a;
    char b;
    float c;
} foo;

struct foo x = { 3, "g", 5.9 };

devient en Python

x = (3, "g", 5.9)

30voto

Inbar Rose Points 13033

La compréhension des œuvres de boucle ou une itération sur les éléments et de les affecter dans un récipient, d'un n-uplet est pas en mesure de recevoir des affectations.

Une fois un n-uplet est créé, il ne peut pas être ajouté, étendue ou affectés. La seule façon de modifier un n-uplet est si l'un de ses objets peut être lui-même affecté (c'est un non-tuple contenant). Parce que le n-uplet est seulement tenue d'une référence à ce type d'objet.

Aussi - un n-uplet a son propre constructeur tuple() qui vous pouvez donner tout itérateur. Ce qui signifie que, pour créer un tuple, vous pourriez faire:

tuple(i for i in (1,2,3))

13voto

mgilson Points 92954

Ma meilleure hypothèse est qu'ils sont à court de crochets et ne pensent pas qu'il serait assez utile de justifier l'ajout d'une syntaxe "laide" ...

1voto

jamylak Points 38094

Je pense que c'est simplement pour des raisons de clarté, nous ne voulons pas encombrer le langage avec trop de symboles différents. De plus, une compréhension tuple n'est jamais nécessaire , une liste peut simplement être utilisée à la place avec des différences de vitesse négligeables, contrairement à une compréhension dictée par opposition à une compréhension liste.

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