这是示例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]
我想知道运行此代码时实际发生了什么。懒惰评估有什么联系。
答案 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)