while循环Python Fibonacci

时间:2016-01-22 09:48:50

标签: python while-loop 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 我看到并理解了结果,我可以得出基本算法的结论,但我不能真正理解这一行的发生情况以及我们为什么需要它。

非常感谢

2 个答案:

答案 0 :(得分:3)

此行按以下顺序执行:

  1. 创建新元组,第一个元素等于b,第二个元素等于a + b
  2. 解压缩元组,第一个元素存储在a中,第二个元素存储在b
  3. 棘手的部分是首先执行正确的部分,而不需要使用临时变量。

答案 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

     

这足够恰当地称为序列解包,适用于右侧的任何序列。序列解包需要左侧的变量列表具有与序列长度相同的元素数。请注意,多重赋值实际上只是元组打包和序列解包的组合。