Fibonacci Lambda函数是如何工作的?

2024-05-13 13:21:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我是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,我不知道表达式的计算结果如何。下划线代表什么,它是如何工作的,等等)

有人能用这两分钟来解释整个结构吗?你知道吗


Tags: lambda函数reduce表达式googlerange代表建议
1条回答
网友
1楼 · 发布于 2024-05-13 13:21:34

一件一件地分解:

lambda n:-定义一个采用1个参数(n)的函数;相当于的匿名版本:def somefunc(n):

reduce()-我们稍后再讨论它的功能;根据docs,这是一个函数,它按顺序对另一个函数、iterable和一些可选的初始值进行操作。这些是:

  1. A)lambda x, _:-再次定义函数。这一次,它是两个参数的函数,下划线作为标识符只是一个惯例,表示我们不会使用它。你知道吗

    B)X + [ <stuff> ]-用第一个参数的值预先准备一些内容列表。我们已经从使用reduce的事实中知道arg是一个列表。你知道吗

    C)这个<stuff>x[-1] + x[-2]-意思是我们在X前面的列表,在这个例子中,是已经在X中的最后两项的总和,在我们在这个迭代中对X做任何事情之前。

  2. range(n-2)是我们正在研究的iterable;因此,一个从1到N-2的数字列表。这里的-2是因为初始值(在3中)已经覆盖了前两个数字。

  3. 说到这里,[0, 1]是我们预定义的X[-2],X[-1]的前两个起始值。

  4. 现在我们正在执行。reduce()从(1)中获取函数,并将其应用于(2)中range()提供的每个参数,并将值附加到(3)中初始化为[0, 1]的列表中。所以,我们称之为I1: [0, 1] + lambda 0, [0, 1],然后是I2: I1 + lambda 1, I1,然后是I3: I2 + lambda 2, I2,依此类推。

相关问题 更多 >