我是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))
答案 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 = 1
和b = 2
,我们就会:
a, b = (2, 1+2)
>> print(a)
>> 2
>> print(b)
>> 3
在后一个例子中,我们有:
a = 2
b = 2 + 2
>> print(a)
>> 2
>> print(b)
>> 4