Python Lambda 与本地引用的绑定
以下代码打印 '1' 两次,而不是 '0' 和 '1':
<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>
要理解这种行为,掌握 Python lambda 如何与局部变量交互至关重要。与预期相反,lambda 在创建时并不固有地绑定到局部变量的引用。相反,它们绑定到调用时检索到的变量的值。
要纠正此问题并将局部变量正确绑定到 lambda 函数,必须使用 lambda 的默认参数。通过在 lambda 定义中设置变量的默认值(例如 lambda v=v: pv(v)),lambda 将引用变量创建时的值。
此行为是并非 lambda 独有。考虑以下示例:
<code class="python">x = "before foo defined" def foo(): print x x = "after foo was defined" foo()</code>
此代码的输出将是“定义 foo 后”,因为 Python 在调用函数时查找 x 的值,而不是在创建函数时查找 x 的值.
以上是为什么 Python Lambda 在调用时而不是创建时绑定到本地引用?的详细内容。更多信息请关注PHP中文网其他相关文章!