使用lambda和列表理解时的惰性评估

时间:2018-10-31 15:10:20

标签: python python-3.x lazy-evaluation

这是示例python代码。

f_list = [lambda x : x ** i for i in range(5)]
[f_list[j](10) for j in range(5)]

我认为输出应为:

[10, 100, 1000, 10000]

但是我得到了这个:

[10000, 10000, 10000, 10000]

我想知道运行此代码时实际发生了什么。懒惰评估有什么联系。

1 个答案:

答案 0 :(得分:0)

这是咖喱为什么很好的一个很好的例子,您可以像这样通过使用函数来实现自己的目标:

f_list = [(lambda y : lambda x : x ** y)(i) for i in range(5)]
r = [f_list[j](10) for j in range(5)]

结果将是:

=> [1, 10, 100, 1000, 10000]

固化:

了解咖喱对我来说是一种简单的方法,而不是将所需的所有参数提供给一个函数,而是创建一个函数,该函数始终接收一个参数,然后返回另一个又接收一个参数的函数,然后在最终功能中,使用所有参数进行所需的转换

一个小例子:

sum_curry = lambda x : lambda y : x + y

这里有一个简单的sum函数,但是想像一下您想拥有plus_one函数,好的,yuu可以像上面那样重用上面的函数:

plus_one = sum_curry(1)