python lambda函数列表没有部分

时间:2011-06-14 18:38:28

标签: python list function lambda list-comprehension

我一直在尝试使用list comprehension在python中生成lambda函数列表。但它不起作用,

例如

fl=[lambda x: x**i for i in range(5)]

我已经检查了另一个问题,它基本上根据i的引用生成相同的函数。

所以我也尝试过偏爱。

from functools import partial

fl=[partial(lambda x: x**i) for i in range(5)]

但它也没有用。任何帮助将不胜感激。欢呼声〜

3 个答案:

答案 0 :(得分:6)

You're tripping over Python scopes

fl=[lambda x, i=i: x**i for i in range(5)]

答案 1 :(得分:6)

您实际上是按名称传递i

fl=[lambda x: x**i for i in range(5)]

每次执行lambda时,它都会将相同的i绑定到函数,因此当执行该函数(稍后)时,它会使用当前值i(其中将是4)。您应该将其作为默认参数传递:

fl=[lambda x, j=i: x**j for i in range(5)]

实际上,我注意到你误导了partial。这里:

fl = [partial(lambda x, y: y ** x, i) for i in range(5)]

这也有效。

答案 2 :(得分:4)

另一个常见的解决方法是使用闭包:

def create_f(i):
    def f(x):
        return x**i
    return f

fl = [create_f(i) for i in range(5)]