Maison >développement back-end >Tutoriel Python >Comment fonctionnent les affectations chaînées en Python ? Sont-elles vraiment équivalentes à plusieurs affectations séquentielles ?

Comment fonctionnent les affectations chaînées en Python ? Sont-elles vraiment équivalentes à plusieurs affectations séquentielles ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-28 03:07:311099parcourir

How do chained assignments work in Python? Are they truly equivalent to multiple sequential assignments?

Comprendre les affectations chaînées en Python

Les affectations chaînées en Python, illustrées par des expressions telles que "x = y = somefunction()", ont suscité discussions concernant leur équivalence à plusieurs affectations séquentielles ("x = somefunction(); y = somefunction()"). Pour clarifier ce sujet, explorons en détail le fonctionnement des affectations chaînées.

Dans une affectation chaînée, la cible la plus à gauche est attribuée en premier. Par conséquent, "x = y = somefunction()" équivaut à :

temp = somefunction()
x = temp
y = temp

Cet ordre est crucial, car la cible de gauche reçoit la valeur de la variable temporaire "temp" avant qu'elle ne soit affectée à la cible à droite. Ceci est évident dans le démontage d'une fonction d'affectation chaînée :

>>> def chained_assignment():
...     x = y = some_function()
...
>>> import dis
>>> dis.dis(chained_assignment)
  2           0 LOAD_GLOBAL              0 (some_function)
              3 CALL_FUNCTION            0
              6 DUP_TOP
              7 STORE_FAST               0 (x)
             10 STORE_FAST               1 (y)
             13 LOAD_CONST               0 (None)
             16 RETURN_VALUE

Notez que la valeur renvoyée par la fonction est stockée d'abord dans "x", puis dans "y".

Ceci la compréhension est cruciale pour comprendre le comportement des affectations enchaînées. Par exemple, les expressions telles que « x = y = [] » doivent être évitées, car « x » et « y » feront référence à la même liste. Privilégiez plutôt des affectations distinctes comme "x = []" et "y = []" pour créer des listes distinctes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn