【问题标题】:Python - appending a function to a list [duplicate]Python - 将函数附加到列表[重复]
【发布时间】:2017-02-20 16:28:20
【问题描述】:

我想创建一个列表,其中包含最多 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

【问题讨论】:

标签: python list function lambda append


【解决方案1】:

正如我在cmets中所说,看看partial

def f(x, n):
    return x**n

basis = [partial(f, n=i) for i in range(10)]
print(basis[0](34))  # 1

【讨论】:

    【解决方案2】:

    这篇文章总结得很到位

    http://docs.python-guide.org/en/latest/writing/gotchas/#late-binding-closures:

    ...您可以创建一个闭包,通过使用默认参数立即绑定到其参数,如下所示:

    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)]
    

    这是一个有点老套的解决方案,但很有效。我仍然强烈建议您阅读提供的链接,因为当您是 Python 新手时,这 3 点通常会出现错误。

    【讨论】:

    • 它接缝这是一个链接唯一的答案。
    • 仅链接的答案不受欢迎。将相关文本复制到答案中,并使用链接获取支持详细信息。
    猜你喜欢
    • 2013-12-30
    • 2013-06-18
    • 2017-04-16
    • 2015-08-05
    • 1970-01-01
    • 2018-10-24
    • 2020-08-06
    • 2013-02-10
    • 2013-07-28
    相关资源
    最近更新 更多