8
votes

Méthode de mission multiple en python

J'essaie de préparer un avenir en informatique, alors j'ai commencé avec Ecmascript et j'essaie maintenant d'en apprendre davantage sur Python. Venant de ECMAScript, voir plusieurs affectations telles que A, B, C = 1, 2, 3 me laisse déconcerter un instant, jusqu'à ce que je réalise qu'il y a plusieurs affectations. Pour rendre les choses un peu plus claires, j'aimerais vraiment faire (a, b, c) = (1, 2, 3) mais je ne suis pas sûr que ce sera une performance mesurable. D'après ce que je comprends, les tuples sont essentiellement comment les tâches multiples fonctionnent indépendamment, mais il y a beaucoup de bizarreries dans le monde, alors j'essaie de ne rien assumer.

Merci d'avance


1 commentaires

Voici un indice pour votre avenir en informatique (je suis dans l'entreprise depuis plus de 30 ans). Ne passez pas de temps sur ce type de question d'optimisation jusqu'à ce que vous puissiez prouver que la déclaration de mission multiple est absolument tuant votre programme. Jusqu'à ce que vous ayez Preuve que quelque chose est inacceptable lent, utilisez-le. Utilisez tout sans vous soucier de la performance. Les gens qui ont inventé la langue déjà inquiet à ce sujet pour vous.


4 Réponses :


11
votes

Il ne faut pas avoir d'effet sur la performance. La parenthèse ne fait pas un tuple, la virgule. Donc (1,2,3) est exactement le même que 1,2,3


1 commentaires

Ah ... Je n'ai même pas pensé à ça. Merci.



1
votes

Multiples affectation est mise en œuvre comme une combinaison de l'emballage de tuple et du déballage de tuple, à ma connaissance, il devrait donc avoir le même effet.


0 commentaires

2
votes

Cela fonctionne également pour les listes: xxx

fonctionne aussi bien


1 commentaires

Et c'est appelé «déballage» en python



13
votes

Il est extrêmement facile à vérifier, avec le dis code> module: xxx pré>

voir? Ces parenthèses totalement redondantes rendent absolument aucune différence forte> au paryecode généré et exécutée - comme, disent, A + B code> et (A + B) code> générera et exécutera exactement le même bytecode que l'autre. Donc, si vous aimez ajouter des parenthèses redondantes, assommez-vous - les personnes qui lisent votre code peuvent ne pas les aimer, mais ceux qui viennent de l'exécuter ne remarqueront jamais. Seulement, pourquoi s'arrêter à seulement deux paires de parenthèses redondantes? Voir, P>

>>> dis.dis(compile('(((a,b,c)))=(((1,2,3)))','','exec'))
  1           0 LOAD_CONST               4 ((1, 2, 3))
              3 UNPACK_SEQUENCE          3
              6 STORE_NAME               0 (a)
              9 STORE_NAME               1 (b)
             12 STORE_NAME               2 (c)
             15 LOAD_CONST               3 (None)
             18 RETURN_VALUE        
>>> 


0 commentaires