我想创建一个包含最高度 n
的单项式的列表basis = [lambda x:x**i for i in range(0,n+1)]
然而,这会创建一个 n 函数列表,但是所有函数都是相同的( n ),而不是0,1,2,... < EM>名词的
我也试过没有列表理解:
basis = []
for i in range(0,n+1):
basis.append(lambda x:x**i)
但结果相同。用经典函数定义代替lambda函数也没有解决它。
我检查了Python lambdas and scoping,但这没有用,因为我不想存储函数值,而是函数本身。例如,我希望能够致电
basis[0](34)
这应该返回
1
答案 0 :(得分:0)
正如我在评论中所说,看看partial
def f(x, n):
return x**n
basis = [partial(f, n=i) for i in range(10)]
print(basis[0](34)) # 1
答案 1 :(得分:-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个错误。