您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python-Lambda函数的范围及其参数?

Python-Lambda函数的范围及其参数?

这里的问题是m变量(参考)来自周围的范围。仅参数保留在lambda范围中。

为了解决这个问题,你必须为lambda创建另一个范围:

def callback(msg):
    print msg

def callback_factory(m):
    return lambda: callback(m)

funcList=[]
for m in ('do', 're', 'mi'):
    funcList.append(callback_factory(m))
for f in funcList:
    f()

在上面的示例中,lambda还使用环绕范围来查找m,但是这次callback_factory是每次callback_factory 调用都创建一次的范围。

或使用functools.partial:

from functools import partial

def callback(msg):
    print msg

funcList=[partial(callback, m) for m in ('do', 're', 'mi')]
for f in funcList:
    f()

创建lambda时,它不会在其使用的范围内复制变量。它维护对环境的引用,以便以后可以查找变量的值。只有一个m。每次循环都会将其分配给它。循环后,变量m具有value 'mi'。因此,当你实际运行稍后创建的函数时,它将在创建该函数m的环境中查找的值,届时将具有value 'mi'

解决此问题的一种常见且惯用的解决方案是,m通过使用lambda作为可选参数的认参数来捕获创建lambda时的值。通常,你使用相同名称的参数,因此不必更改代码的主体:

for m in ('do', 're', 'mi'):
    funcList.append(lambda m=m: callback(m))
python 2022/1/1 18:20:42 有493人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶