lambda 函数不关闭 Python 中的参数? [英] lambda function don't closure the parameter in Python?

查看:19
本文介绍了lambda 函数不关闭 Python 中的参数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

代码说得更多:

<代码>从 pprint 导入 pprint里 = []对于范围内的 i (5):li.append(lambda: pprint(i))对于 li 中的 k:k()

产量:

<前>44444

为什么不

<前>01234

??

谢谢.

附言如果我编写完整的装饰器,它会按预期工作:

<代码>从 pprint 导入 pprint里 = []#for i in range(5):#li.append(lambda : pprint(i))定义关闭(i):def_func():打印(一)返回_func对于范围内的 i (5):li.append(closure(i))对于 li 中的 k:k()

解决方案

你需要做的:

lambda i=i: pprint(i)

而是捕获i

的当前值

Code talks more:


from pprint import pprint

li = []

for i in range(5):
        li.append(lambda : pprint(i))

for k in li:
        k()

yield:

4
4
4
4
4

why not

0
1
2
3
4

??

Thanks.

P.S. If I write the complete decorator, it works as expected:



from pprint import pprint

li = []

#for i in range(5):
        #li.append(lambda : pprint(i))

def closure(i):
        def _func():
                pprint(i)
        return _func

for i in range(5):
        li.append(closure(i))

for k in li:
        k()

解决方案

you need to do:

lambda i=i: pprint(i)

instead to capture the current value of i

这篇关于lambda 函数不关闭 Python 中的参数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆