不使用partial的Python lambda函数列表

6 投票
3 回答
812 浏览
提问于 2025-04-16 19:33

我一直在尝试用列表推导式在Python中生成一系列的lambda函数,但没有成功。

比如说:

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

我查看了其他的问题,发现它们基本上是根据i的值生成相同的函数。

所以我也试了试partial。

from functools import partial

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

但这也没有成功。任何帮助都非常感谢。谢谢~

3 个回答

4

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

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

fl = [create_f(i) for i in range(5)]
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)]

这样也是可以的。

6

你可能在Python的作用域上遇到了一些问题。

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

撰写回答