在python中使用lambda表达式在循环内生成函数 [英] Generating functions inside loop with lambda expression in python
本文介绍了在python中使用lambda表达式在循环内生成函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如果我列出两个函数列表:
def makeFun(i):返回拉姆达:我a = [makeFun(i) for i in range(10)]b = [lambda: i for i in range(10)]
为什么列表 a
和 b
不以保存方式运行?
例如:
<预><代码>>>>a2]()2>>>b[2]()9 解决方案
从技术上讲,lambda 表达式在全局作用域中可见的 i
上封闭,即最后设置为 9.在所有 10 个 lambda 表达式中都引用了 same i
.例如,
i = 13打印 b[3]()
在 makeFun
函数中,lambda 在调用函数时定义的 i
上关闭.那些是十个不同的 i
.
If I make two lists of functions:
def makeFun(i):
return lambda: i
a = [makeFun(i) for i in range(10)]
b = [lambda: i for i in range(10)]
why do lists a
and b
not behave in the save way?
For example:
>>> a[2]()
2
>>> b[2]()
9
解决方案
Technically, the lambda expression is closed over the i
that's visible in the global scope, which is last set to 9. It's the same i
being referred to in all 10 lambdas. For example,
i = 13
print b[3]()
In the makeFun
function, the lambda closes on the i
that's defined when the function is invoked. Those are ten different i
s.
这篇关于在python中使用lambda表达式在循环内生成函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文