.>>>>>>>>>>>>>>>>>>>>>>>>>>>>>修改前:
返回x的乘法函数,是函数,调用才执行
def make():
return [lambda x:i*x for i in range(3)]
for r in make():
print(r(4))
期望输出:
0
4
8
实际输出:
8
8
8
原因:
i因为闭包延迟绑定,到执行的时候已经为2,所以参数4一直只和最终的2相乘
.>>>>>>>>>>>>>>>>>>>>>>>>>>>>>修改后:
def make():
解决的办法就是给它立刻绑定
return [lambda x:i*x for i in range(3)]
或
def make():
res=[]
for i in range(4):
立即绑定
def code(x,i=i):
return x**i;
res+=[code]
return res;
python 闭包 一个很小知识点
最新推荐文章于 2025-10-15 20:32:06 发布
本文通过一个Python代码示例,深入解析了闭包中变量的延迟绑定问题及其解决方案——立即绑定。详细解释了为何闭包会捕获变量的引用而非其值,以及如何通过定义内部函数来实现立即绑定,确保每次调用时使用正确的变量值。

6万+

被折叠的 条评论
为什么被折叠?



