不使用partial的Python lambda函数列表
我一直在尝试用列表推导式在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)]