参见英文答案 > Multiple assignment and evaluation order in Python 8个
我是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))
解决方法:
当你这样做时:
a, b = b, a+b
a将保持b的先前值,b将基于先前的值保持b.
但是当你这样做时:
a = b
b = a + b
a的值在a = b期间更新为b,因此b将具有不同的结果,因为a现在已更新.
例如,请参阅交换两个值的简单代码.有可能因为价值的动态变化:
>>> a , b = 5, 10
>>> a, b = b, a
>>> a, b
(10, 5)