`a, b = b, a+b` 和 `a = b; 有什么区别? b = a+b` 代表斐波那契数列
What is the difference between `a, b = b, a+b` and `a = b; b = a+b` for 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))
b, a+b
与 (b, a+b)
(元组)相同。当您执行 a, b = b, a+b
时,您隐含地将第一个元素分配给左侧的变量,将第二个值分配给右侧的变量。
在您的替换中,您在 计算 b
之前更改了 a
的值 ,这在之前没有发生过。
所以,如果我们假设 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
当你这样做时:
a, b = b, a+b
a
将保留 b 的先前值,b
将根据先前的值保留 a+b
。
但是当你这样做时:
a = b
b = a + b
a
的值在 a=b
期间更新为 b
,因此 a+b
的结果将与 a
现在更新的结果不同。
例如,查看交换两个值的简单代码。这可能是因为值的动态变化:
>>> a , b = 5, 10
>>> a, b = b, a
>>> a, b
(10, 5)
我是 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))
b, a+b
与 (b, a+b)
(元组)相同。当您执行 a, b = b, a+b
时,您隐含地将第一个元素分配给左侧的变量,将第二个值分配给右侧的变量。
在您的替换中,您在 计算 b
之前更改了 a
的值 ,这在之前没有发生过。
所以,如果我们假设 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
当你这样做时:
a, b = b, a+b
a
将保留 b 的先前值,b
将根据先前的值保留 a+b
。
但是当你这样做时:
a = b
b = a + b
a
的值在 a=b
期间更新为 b
,因此 a+b
的结果将与 a
现在更新的结果不同。
例如,查看交换两个值的简单代码。这可能是因为值的动态变化:
>>> a , b = 5, 10
>>> a, b = b, a
>>> a, b
(10, 5)