我正在尝试通读以下代码,但是我遇到了一些困难:
def fib2(n): # return Fibonacci series up to n
"Return a list containing the Fibonacci series up to n"
result = []
a, b = 0, 1
while b < n:
result.append(b) # see below
a, b = b, a+b
return result
f100 = fib2(100) # call it
f100 # write the result
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
我们从开始:
def fib2(n)
据我了解,我们只是在创建定义,其中n是要指定的参数。然后我们继续:
result = []
在我看来,这似乎是要将输出发布到一个空列表中。从那里我们继续:
a, b = 0, 1
我有点难以理解,为什么我们指定“ a = 0”和“ b = 1”?是否只是指定一个初始值,其值实际上并不重要?例如,我可以指定:
a, b = 2,3
并在这一点上开始这个系列?如果我们再看一下这段代码:
while b < n:
result.append(b)
a, b = b, a+b
return result
我假设这只是在外观上满足函数目标的情况,以便向我们提供序列,直到B不小于n,所有这些都附加到空列表中。退货结果是否只是为了给我们打印输出?抱歉,我知道这是基本的,但是我对函数的理解有些困难,因此我认为我会选择一个非常基本的示例。
def fib2(n)
你是正确的,它只是定义一个function
名为fib2
这需要n
作为一个参数。
result = []
result
将是 type list
a, b = 0, 1
对于斐波那契数列,重要的是要了解该数列会增加n-1
和n-2
将要创建的值(即如何1 1 2 3 5 8...
创建)。
像这样看:
0 1 1 2 3 5 8...
a b....
其中a为0,b为1,因此b
是序列的开始
while b < n:
result.append(b)
a, b = b, a+b
return result
Python是一门很棒的语言,但可能会造成混淆。
a, b = b, a+b
让我们研究一下。Python允许分配变量,这样您就可以在不影响初始值的情况下分配变量。
也就是说,如果a
为0且b
为1,a, b = b, a+b
则将如下所示:
a
将变为b
,但将其存储为临时值1。重要的是要知道,b
直到完成这一行代码后,a才真正被赋值。
b
将成为a+b
或0+1
并将其存储为新值。
现在,如果b
为2且a
为1,让我们看看会发生什么:
a, b = b, a+b
a
将成为b
但直到代码行之后,因此a
将成为2
b
will成为a+b
,或者在这种情况下1+2
。如您所见,a
首先重新分配实际上并不会更改a
此表达式中的值。挺整洁的!
考虑这种单行分配的一种更简单的方法是这样的:
a, b = b, a+b
a1 = b
b1 = a+b
a = a1
b = b1
是的,while b < n
要检查是否满足while
循环条件。一旦b
不再小于n
循环,循环将停止并result
返回
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句