[英]While-loop Python Fibonacci
我是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
我看到并理解了结果,我可以得出基本算法的结论,但是我不了解这条线正在发生的事情以及为什么我们需要它。
非常感谢
该行按以下顺序执行:
b
,第二个元素等于a + b
a
,第二个元素存储在b
棘手的部分是首先执行正确的部分,并且您无需使用临时变量。
之所以需要它,是因为如果用新值更新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
请参阅有关元组和序列的文档的最后一段:
语句
t = 12345, 54321, 'hello!'
是元组打包的示例:值12345、54321和'hello!' 被打包成一个元组。 反向操作也是可能的:
>>> x, y, z = t
这被适当地称为序列解压缩,适用于右侧的任何序列。 序列解压缩要求左侧的变量列表具有与序列长度相同数量的元素。 注意,多重分配实际上只是元组打包和序列拆包的组合。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.