Soy nuevo en Python, así que quiero hacerte una pregunta.
Anteriormente, mientras escribía una función de fibonacci, intenté reemplazar
a, b = b, a+b
con
a = b b = a + b
Creyendo que era lo mismo pero noté que la salida es diferente (y incorrecta) ¿No deberían estos dos códigos hacer lo mismo? Aquí está el código completo:
#!/usr/bin/env python # -*- coding: utf-8 -*- def main(args): fibonacci(1000) return 0 def fibonacci(n): a, b = 0, 1 while b < n: print b, a, b = b, a+b # if I comment this and decomment the two line below it shows me a different output # a = b # b = a + b if __name__ == '__main__': import sys sys.exit(main(sys.argv))
Cuando tu lo hagas:
a, b = b, a+b
a
mantendrá el valor anterior de b y b
mantendrá a+b
función del valor anterior.
Pero cuando lo haces:
a = b b = a + b
El valor de a
se actualiza a b
durante a=b
y, por lo tanto, a+b
tendrá un resultado diferente, ya que a
ahora se actualiza.
Por ejemplo, ver código simple para intercambiar dos valores. Es posible debido al cambio en los valores sobre la marcha:
>>> a , b = 5, 10 >>> a, b = b, a >>> a, b (10, 5)
b, a+b
es lo mismo que (b, a+b)
(una tupla). Cuando haces a, b = b, a+b
puedes asignar el primer elemento a la variable de la izquierda y el segundo valor a la variable de la derecha.
En su reemplazo, cambió el valor de a antes de calcular b
, lo que no sucedió antes.
Entonces, si asumimos que a = 1
y b = 2
, tenemos:
a, b = (2, 1+2) >> print(a) >> 2 >> print(b) >> 3
En tu último ejemplo, tendríamos:
a = 2 b = 2 + 2 >> print(a) >> 2 >> print(b) >> 4