我是Python的初学者(自学)并且被介绍了Lambda(无名)函数,但是我无法推导Fibonacci级数的下面的表达式(来自Google),但是没有在线的解释(Google)来解释如何计算它(一步一步)。我想有人能帮我解决这个问题。你能帮助我们一步一步地评估并解释一下吗?你知道吗
lambda n: reduce(lambda x, _: x+[x[-1]+x[-2]],range(n-2), [0, 1])
提前谢谢。你知道吗
(感谢xnkr对reduce函数的建议,是的,我能够理解这一点,这是我自我训练的一部分,但我不明白的是,对于lambda x,x+[x[-1]+x[-2]],range(n-2),[0,1],它是如何工作的。这不仅仅是关于reduce的问题,而是关于整个构造的问题-有两个lambda,一个reduce,我不知道表达式的计算结果如何。下划线代表什么,它是如何工作的,等等)
有人能用这两分钟来解释整个结构吗?你知道吗
一件一件地分解:
lambda n:
-定义一个采用1个参数(n)的函数;相当于的匿名版本:def somefunc(n):
reduce()
-我们稍后再讨论它的功能;根据docs,这是一个函数,它按顺序对另一个函数、iterable和一些可选的初始值进行操作。这些是:A)
lambda x, _:
-再次定义函数。这一次,它是两个参数的函数,下划线作为标识符只是一个惯例,表示我们不会使用它。你知道吗B)
X + [ <stuff> ]
-用第一个参数的值预先准备一些内容列表。我们已经从使用reduce的事实中知道arg是一个列表。你知道吗C)这个
<stuff>
是x[-1] + x[-2]
-意思是我们在X前面的列表,在这个例子中,是已经在X中的最后两项的总和,在我们在这个迭代中对X做任何事情之前。range(n-2)
是我们正在研究的iterable;因此,一个从1到N-2的数字列表。这里的-2
是因为初始值(在3中)已经覆盖了前两个数字。说到这里,
[0, 1]
是我们预定义的X[-2],X[-1]的前两个起始值。现在我们正在执行。
reduce()
从(1)中获取函数,并将其应用于(2)中range()提供的每个参数,并将值附加到(3)中初始化为[0, 1]
的列表中。所以,我们称之为I1: [0, 1] + lambda 0, [0, 1]
,然后是I2: I1 + lambda 1, I1
,然后是I3: I2 + lambda 2, I2
,依此类推。相关问题 更多 >
编程相关推荐