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!