首页  >  文章  >  后端开发  >  为什么 Python Lambda 绑定到局部变量的值,而不是引用?

为什么 Python Lambda 绑定到局部变量的值,而不是引用?

Linda Hamilton
Linda Hamilton原创
2024-10-28 06:37:02982浏览

 Why do Python Lambdas Bind to Local Variables' Values, Not References?

Python Lambda 函数和局部变量绑定

使用 Python lambda 函数时,了解它们在引用局部变量方面的行为非常重要它们定义的范围。下面的代码说明了这个问题:

<code class="python">def pv(v):
    print(v)

x = []
for v in range(2):
    x.append(lambda: pv(v))

for xx in x:
    xx()</code>

在这种情况下,我们期望看到 0 和 1 打印到控制台。然而,实际输出打印 1 两次。此行为源于 Python lambda 绑定到局部变量的方式。

陷阱:早期绑定

Python lambda 在调用时不会绑定到局部变量的引用被创建了。相反,它们绑定到该特定时间点的变量值。因此,当调用 lambda 时,它访问变量的当前值,而不是创建时可用的值。

解决方案:使用默认参数进行后期绑定

要将局部变量绑定到 lambda 函数并保留其正确引用,我们可以使用后期绑定。这是通过向 lambda 函数传递默认参数来实现的,如下所示:

<code class="python">x.append(lambda v=v: pv(v))</code>

通过此更改,lambda 将在创建 lambda 时绑定到 v 的值,而不是在调用它时。因此,当我们迭代列表 x 并调用每个 lambda 函数时,我们将获得预期的输出 0 和 1。

理解早期绑定

进一步澄清这个概念,请考虑以下示例:

<code class="python">x = "before foo defined"
def foo():
    print(x)
x = "after foo was defined"
foo()</code>

此代码片段将“定义 foo 后”打印到控制台,演示变量是在函数调用时绑定的,而不是创建时。

以上是为什么 Python Lambda 绑定到局部变量的值,而不是引用?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn