了解 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中文网其他相关文章!