gpt4 book ai didi

带有 lambda 的 Python 列表理解

转载 作者:IT老高 更新时间:2023-10-28 20:53:02 26 4
gpt4 key购买 nike

我正在运行 Python 3.4.2,但我对代码的行为感到困惑。我正在尝试创建一个具有递增程度的可调用多项式函数列表:

bases = [lambda x: x**i for i in range(3)]

但出于某种原因,它会这样做:

print([b(5) for b in bases])
# [25, 25, 25]

为什么 bases 在列表推导中似乎是最后一个 lambda 表达式的列表,重复?

最佳答案

问题是 classic"gotcha" , 是lambda 函数中引用的 i 直到调用 lambda 函数。那时,i 的值是它的最后一个值绑定(bind)到 for-loop 结束时,即 2.

如果您将 i 绑定(bind)到 lambda 函数定义中的默认值,则每个 i 将成为一个局部变量,并且它的默认值在 lambda 被定义而不是被调用时被评估并绑定(bind)到函数。

因此,当调用 lambda 时,i 现在在 本地范围 中查找,并使用其默认值:

In [177]: bases = [lambda x, i=i: x**i for i in range(3)]

In [178]: print([b(5) for b in bases])
[1, 5, 25]

供引用:

关于带有 lambda 的 Python 列表理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28268439/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com