Python的 - 在斐波那契函数变量值声明的区别(Python - Difference betw

2019-07-03 18:50发布

我是那种在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

我认为这将是正确的,但是当我执行的程序,我得到了不同的输出。 能否给我有人解释这两种类型声明的区别?

不管怎么说,还是要谢谢你。

Answer 1:

b, a+b创建包含这两个值的元组。 然后a, b = ...解包元组和它的值分配给变量。 在你的代码,但是您覆盖第一的价值,所以第二行使用了新的价值。

a, b = b, a + b

大致等于:

tmp = a
a = b
b = tmp + b


Answer 2:

当Python执行

a,b = b, a+b

它评估右手侧的第一 ,然后解包元组和值分配给ab 。 注意a+b上的右手侧使用的a

当Python执行

a=b
b=a+b

它计算b ,并将其值分配给a 。 然后,它计算a+b并将该值分配给b 。 注意,现在a+b使用a



Answer 3:

这句法新值同时分配给ab基于当前值。 它不等同的原因是,当你写两个单独的语句,第二次转让使用的a代替的a



Answer 4:

在第一个例子中,不更新,直到整个行被评价采取b的值 - 所以B实际上是A + B。

在您例如,你已经设置A到B,所以最后一行(B = A + B)可以很容易地被B = + B。

这一切都在其中的事情进行评估的顺序。



文章来源: Python - Difference between variable value declaration on Fibonacci function