繁体   English   中英

为什么我用这两组Python代码得到不同的结果

[英]Why do I get different results with these two sets of Python Code

我正在浏览 python 3.7 文档,我看到了我尝试过的这个示例代码,并得到了以下结果。

>>> # Fibonacci series:
... # the sum of two elements defines the next
... a, b = 0, 1
>>> while a < 10:
...     print(a)
...     a, b = b, a+b
...
0
1
1
2
3
5
8

然后我尝试以不同的方式重写代码,希望产生相同的结果。 但是我尝试了以下并得到了不同的结果。 请问这个和上面的有什么区别,为什么结果不同。

>>>a, b = 0, 1
>>>while a < 10:
    print(a)
    a = b
    b = a + b
0
1
2
4
8

a, b = b, a + b

相当于

temp = b, a + b
a = temp[0]
b = temp[1]

请注意,这不会在评估=右侧的值的同时执行对变量的赋值。 右侧的所有内容在执行任何作业之前都会进行评估。

在您的版本中,计算a + b是在分配a = b之后完成的。 但是为了得到正确的答案,你需要在那个加法中使用a的旧值,而不是更新后的值。

如果你想按顺序写,你可以这样做

next_b = a + b
a = b
b = next_b

或者

old_a = a
a = b
b = old_a + b

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM