为什么 Lambda 函数的范围会影响其在 Python 中的输出?

Barbara Streisand
发布: 2024-10-19 17:26:30
原创
944 人浏览过

Why Does the Scope of Lambda Functions Impact Their Output in Python?

Lambda 函数及其参数的范围

在 Python 中,lambda 函数为定义内联函数提供简写表示法。但是,它们的作用域和参数处理可能会导致意外行为,如以下代码所示:

def callback(msg):
    print msg

# Iterative Approach
funcList = []
for m in ('do', 're', 'mi'):
    funcList.append(lambda: callback(m))
for f in funcList:
    f()

# Individual Creation
funcList = []
funcList.append(lambda: callback('do'))
funcList.append(lambda: callback('re'))
funcList.append(lambda: callback('mi'))
for f in funcList:
    f()
登录后复制

预期输出为:

do
re
mi
do
re
mi
登录后复制
登录后复制

但是,实际输出为:

mi
mi
mi
do
re
mi
登录后复制

此行为源于以下事实:lambda 函数不会从封闭范围创建变量的副本。相反,他们维护对这些变量的引用。因此,循环中 m 值的更改会影响该循环中创建的所有 lambda 函数。

要解决此问题,通常的做法是在创建 lambda 函数时捕获 m 的值将其用作可选参数的默认参数:

for m in ('do', 're', 'mi'):
    funcList.append(lambda m=m: callback(m))
登录后复制

这可确保每个 lambda 函数捕获 m 的正确值,从而产生所需的输出:

do
re
mi
do
re
mi
登录后复制
登录后复制

以上是为什么 Lambda 函数的范围会影响其在 Python 中的输出?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!