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 - 将函数附加到列表[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python。烧瓶。点击后获取列表[重复]

将项目附加到列表列表中的指定列表(Python)[重复]

13 个非常有用的 Python 代码片段

Python-在while循环期间将列表附加到列表-结果与预期不符[重复]

附加到 Python 字典中的列表 [重复]

将数组列表附加到数组并在 kotlin 中重复此操作