首页 >后端开发 >Python教程 >Python Lambda 函数如何处理局部变量引用以及何时对它们求值?

Python Lambda 函数如何处理局部变量引用以及何时对它们求值?

Linda Hamilton
Linda Hamilton原创
2024-10-27 04:06:02508浏览

How do Python Lambda Functions Handle Local Variable References and When Do They Get Evaluated?

了解 Python Lambda 与本地值的绑定

在 Python 中使用 lambda 函数时,了解它们如何与本地变量交互非常重要,特别是当多个 lambda 引用同一个变量时。

考虑以下示例:

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

x = []
for v in range(2):
    x.append(lambda: pv(v))  # Lambda binds to the reference of 'v'

for xx in x:
    xx()  # Prints 1 twice</code>

最初,您可能期望列表“x”中的 lambda 函数引用当前“v”在他们创作的时候。然而,Python 并不是这样工作的。相反,Python 在函数调用时计算变量名称,导致两个 lambda 引用“v”的最终值(即 1)。

实现所需的行为(打印 0,然后打印 1) ),您可以利用 Python 的默认参数机制:

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

x = []
for v in range(2):
    x.append(lambda v=v: pv(v))  # Lambda binds to the copy of 'v' at creation time

for xx in x:
    xx()  # Prints 0 and then 1</code>

通过为“v”设置默认参数,lambda 函数将绑定到在创建时创建的“v”的本地副本,确保它们在以后使用时保留正确的引用。

记住,Python 在函数调用时而不是创建时查找变量名称。这一原则不仅适用于 lambda,也适用于常规函数,如以下示例所示:

<code class="python">x = "before foo defined"

def foo():
    print(x)  # Prints "after foo was defined"

x = "after foo was defined"
foo()</code>

以上是Python Lambda 函数如何处理局部变量引用以及何时对它们求值?的详细内容。更多信息请关注PHP中文网其他相关文章!

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