首页 > 后端开发 > Python教程 > 为什么 Python Lambda 在调用时而不是创建时绑定到本地引用?

为什么 Python Lambda 在调用时而不是创建时绑定到本地引用?

DDD
发布: 2024-10-29 21:41:29
原创
466 人浏览过

Why does Python Lambda bind to local references at invocation time, not creation time?

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板