Python - 将函数附加到列表

时间:2017-02-20 16:28:20

标签: python list function lambda append

我想创建一个包含最高度 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

2 个答案:

答案 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个错误。