首页  >  文章  >  后端开发  >  为什么 Lambda 函数的范围会影响其在 Python 中的输出?

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

Barbara Streisand
Barbara Streisand原创
2024-10-19 17:26:30947浏览

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

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