我是python的新手,我对其他代码的实际上很差。 对于你们大多数人来说,这是一个愚蠢的问题,但我应该从哪里开始。
def fib(n):
a, b = 0, 1
while a < n:
print(a, end=' ')
a, b = b, a+b
print()
我不明白为什么要进入a, b = b, a+b
我看到并理解了结果,我可以得出基本算法的结论,但我不能真正理解这一行的发生情况以及我们为什么需要它。
非常感谢
答案 0 :(得分:3)
此行按以下顺序执行:
b
,第二个元素等于a + b
a
中,第二个元素存储在b
棘手的部分是首先执行正确的部分,而不需要使用临时变量。
答案 1 :(得分:2)
您需要它的原因是,如果您使用新值更新a
,则无法计算b
的新值。在计算新值时,您总是可以使用临时变量来保留旧值,但这是避免这种情况的一种非常简洁的方法。
它被称为序列解包。
在你的陈述中:
a, b = b, a + b
右侧b, a + b
创建tuple
:
>>> 8, 5 + 8
(8, 13)
然后将其分配给左侧,这也是元组a, b
。
>>> a, b = 8, 13
>>> a
8
>>> b
13
请参阅Tuples and Sequences上的文档的最后一段:
语句
t = 12345, 54321, 'hello!'
是元组包装的一个例子:值12345,54321和'你好!'在元组中包装在一起。反向操作也是可能的:
>>> x, y, z = t
这足够恰当地称为序列解包,适用于右侧的任何序列。序列解包需要左侧的变量列表具有与序列长度相同的元素数。请注意,多重赋值实际上只是元组打包和序列解包的组合。