`a,b = b,a + b`和'a = b之间有什么区别;对于斐波那契,b = a + b`

时间:2016-11-22 16:30:51

标签: python python-2.7 fibonacci

我是python的新手所以我想问你一个问题..

在我写斐波那契函数的时候,我试图替换

a, b = b, a+b

a = b
b = a + b

相信它是一回事,但我注意到输出是不同的(和错误的) 难道这两个代码不应该做同样的事情吗? 这是完整的代码:

#!/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))

2 个答案:

答案 0 :(得分:3)

当你这样做时:

a, b = b, a+b

a将保留之前的b值,b将保留a+b基于之前的值。

但是当你这样做时:

a = b
b = a + b

a期间,b的值更新为a=b,因此a+b的{​​{1}}现在已更新,因此a会有不同的结果。

例如,请参阅交换两个值的简单代码。这是可能的,因为值的变化:

>>> a , b = 5, 10
>>> a, b = b, a
>>> a, b
(10, 5)

答案 1 :(得分:2)

b, a+b(b, a+b)(元组)相同。当您执行a, b = b, a+b时,您将第一个元素分配给左侧的变量,将第二个元素分配给右侧的变量。

在您的替代品中,您在计算a之前更改了b的值,这在以前没有发生过。

因此,如果我们假设a = 1b = 2,我们就会:

a, b = (2, 1+2)
>> print(a)
>> 2
>> print(b)
>> 3

在后一个例子中,我们有:

a = 2
b = 2 + 2
>> print(a)
>> 2
>> print(b)
>> 4