这个 Fibonacci Lambda 函数是如何工作的?

S.S*_*bhu 0 python algorithm fibonacci

我是Python(自学)的初学者,并了解了Lambda(无名)函数,但我无法推导出斐波那契数列的以下表达式(从Google获得),但在线(Google)没有关于如何评估它的解释(一步步)。这里有很多脑力,我想有人可以帮助我。您能帮忙逐步评估并解释一下吗?

lambda n: reduce(lambda x, _: x+[x[-1]+x[-2]],range(n-2), [0, 1])

提前致谢。

(感谢 xnkr,解释了关于减少函数的建议,是的,我能够理解这一点,这是我所做的自我训练的一部分,但我不明白的是这对于 lambda x, _ : x+[x[ -1]+x[-2]],range(n-2), [0, 1]。这不仅仅是一个关于reduce的问题,而是关于整个构造的问题——有两个lambda,一个reduce,我不知道表达式的计算结果如何。下划线代表什么,它是如何工作的,等等)

有人可以花 2 分钟来解释一下这里的整个结构吗?

小智 5

一点一点地分解:

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

reduce()- 我们稍后会回到它的作用;根据文档,这是一个按顺序对另一个函数、可迭代函数和可选的初始值进行操作的函数。这些都是:

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

    二)X + [ <stuff> ] - 在第一个参数的值前面添加一些内容列表。从我们使用reduce 的事实中我们已经知道arg 是某个列表。

    C) <stuff>is x[-1] + x[-2]- 意味着在本例中,我们在 X 前面添加的列表是在本次迭代中对 X 执行任何操作之前X中已存在的最后两项的总和

  2. range(n-2)是我们正在处理的可迭代对象;所以,从 1 到 N-2 的数字列表。之所以-2出现在这里,是因为初始值(3 中)已经涵盖了前两个数字。

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

  4. 现在我们正在执行。reduce()从 (1) 中获取函数,并继续将其应用于 (2) 中 range() 提供的每个参数,并将值附加到如[0, 1](3) 中初始化的列表。因此,我们调用I1: [0, 1] + lambda 0, [0, 1]、then I2: I1 + lambda 1, I1、thenI3: I2 + lambda 2, I2等等。