Python lambda 在列表推导式中的闭包问题
发布时间
阅读量:
阅读量
一、面试题解析与启示
请提供以下代码执行后的输出结果
li = [lambda : x for x in range(10)]
ret = li[0]()
print(ret)
最终得出的结论为9,令人意外的是,在li列表中所包含的所有匿名函数执行后的结果均显示为9。

二、闭包产生的影响
Python 闭包所引发的延迟绑定特性,使得在内部函数执行时才会对变量进行查找。因此,当任意一个 li 列表中的匿名函数被调用时,x 的值将依据调用时的外部作用域进行确定。由于所有 lambda 函数均在 for 循环结束后才被调用,此时 x 的最终值为 9,从而导致每一个 lambda 函数所返回的结果均为 9。
通过以下图表可以更加直观地理解这一列表推导式的运行机制。

还没有任何评论哟~
