我是那种在python初学者。 我一直在寻找一个类型做一个斐波那契功能,
def fib(n):
a=0
b=1
while a<n:
print a
a,b=b,a+b
我看到了A,B = B,A + B声明。 所以,我认为A = B和B = A + B是相同的,B = A,B + A,所以我改变了功能,它是这样的:
def fib(n):
a=0
b=1
while a<n:
print a
a=b
b=a+b
我认为这将是正确的,但是当我执行的程序,我得到了不同的输出。 能否给我有人解释这两种类型声明的区别?
不管怎么说,还是要谢谢你。
b, a+b
创建包含这两个值的元组。 然后a, b = ...
解包元组和它的值分配给变量。 在你的代码,但是您覆盖第一的价值,所以第二行使用了新的价值。
a, b = b, a + b
大致等于:
tmp = a
a = b
b = tmp + b
当Python执行
a,b = b, a+b
它评估右手侧的第一 ,然后解包元组和值分配给a
和b
。 注意a+b
上的右手侧使用的旧值a
。
当Python执行
a=b
b=a+b
它计算b
,并将其值分配给a
。 然后,它计算a+b
并将该值分配给b
。 注意,现在a+b
使用新值a
。
这句法新值同时分配给a
和b
基于当前值。 它不等同的原因是,当你写两个单独的语句,第二次转让使用的新值a
代替的旧值a
。
在第一个例子中,不更新,直到整个行被评价采取b的值 - 所以B实际上是A + B。
在您例如,你已经设置A到B,所以最后一行(B = A + B)可以很容易地被B = + B。
这一切都在其中的事情进行评估的顺序。
文章来源: Python - Difference between variable value declaration on Fibonacci function