2009-09-02 13 views

Respuesta

16
x, y = x + 3 * y, 4 * x + 1 * y 

es el equivalente de:

x = x + 3 * y 
y = 4 * x + 1 * y 

SALVO que utiliza los valores originales para x e y en ambos cálculos - debido a que los nuevos valores para x e y no se asignan hasta que ambos los cálculos están completos.

La forma genérica es:

x,y = a,b 

donde a y b son expresiones de los valores de los cuales se asignan a x e y respectivamente. En realidad se puede asignar cualquier tupla (conjunto de valores separados por comas) a cualquier tupla de variables del mismo tamaño - por ejemplo,

x,y,z = a,b,c 

también quiere trabajar, pero

w,x,y,z = a,b,c 

¿No porque el el número de valores en la tupla de la derecha no coincide con el número de variables en la tupla de la izquierda.

+4

creo que una variable temporal agrega claridad. Espero que no te importe – hop

+4

De hecho, creo que al explicarlo con un "EXCEPTO" enfatizado aclaro el punto, así que revirtí el cambio. Gracias de todos modos por el intento de mejora, simplemente tengo una opinión diferente sobre el asunto. :) – Amber

+0

Tiene perfecto sentido. Al verlo envuelto entre paréntesis quedó totalmente claro. Muy fácil de leer rápido y perder ese pequeño detalle. ¡Gracias! –

12

Es una asignación a tuple, también llamada que desempaqueta la secuencia. Probablemente es más al agregar paréntesis alrededor de las tuplas:

(x, y) = (x + 3 * y, 4 * x + 1 * y) 

x + 3 * y El valor se asigna a x y el valor 4 * x + 1 * y se asigna a y.

Es equivalente a esto:

x_new = x + 3 * y 
y_new = 4 * x + 1 * y 
x = x_new 
y = y_new 
+7

Probablemente aún más claro si agrupa los paréntesis de manera diferente: 'x, y = (x + 3 * y), (4 * x + 1 * y)'. La coma puede ser fácil pasar por alto allí. –

+0

Ah, sí, el paréntesis lo dejó todo en claro: los ojos no podían verlo antes [golpea la frente] ... –

0

También vi recientemente esta referido como "asignación simultánea", que parece captar el espíritu de varias de las respuestas.

Cuestiones relacionadas