Python - 将函数附加到列表[重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python - 将函数附加到列表[重复]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
我想创建一个包含n次单项式的列表
basis = [lambda x:x**i for i in range(0,n+1)]
然而,这会创建一个n个函数的列表,但是所有相同的(函数n)而不是0,1,2,... n
我也试过没有列表理解:
basis = []
for i in range(0,n+1):
basis.append(lambda x:x**i)
但结果相同。用经典函数定义代替lambda函数也没有解决它。
我检查了Python lambdas and scoping,但这没有帮助,因为我不想存储函数值,而是函数本身。例如,我希望能够打电话
basis[0](34)
这应该回来了
1
答案
正如我在评论中所说,看看partial
def f(x, n):
return x**n
basis = [partial(f, n=i) for i in range(10)]
print(basis[0](34)) # 1
另一答案
此条目完美地总结了它
http://docs.python-guide.org/en/latest/writing/gotchas/#late-binding-closures:
...你可以创建一个闭包,通过使用默认的arg直接绑定到它的参数:
def create_multipliers(): return [lambda x, i=i : i * x for i in range(5)]
您的代码将成为:
basis = [lambda x,i=i:x**i for i in range(0,n+1)]
这是一个hacky解决方案,但有效。我仍然强烈建议您阅读所提供的链接,因为当您不熟悉Python时,通常会出现3个错误。
以上是关于Python - 将函数附加到列表[重复]的主要内容,如果未能解决你的问题,请参考以下文章