def fun():
return[lambda x:i*x for i in range(3)]
for f in fun():
print(f(1),end='')我所能理解的是,fun()返回3个函数,将给定的参数乘以0, 1 ,2,然后f表示每个函数(Lambda),并给出参数值1。
基本来说,这套衣服应该是:
012
但这件旧衣服是:
222.
这是因为所有的lambda都是实例吗?我甚至检查过,返回的lambdas在f中没有相同的地址,所以它们不是实例?
我肯定漏掉了什么东西,但我不知道该往哪个方向去找那件衣服。
清单理解?兰巴斯?装饰师?
发布于 2022-02-20 11:15:42
在常见问题中有一个解释。
Python的闭包是后期绑定。这意味着在调用内部函数时会查找闭包中使用的变量的值。 在这里,每当调用任何返回的函数时,都会在调用时在周围的作用域中查找
i的值。到那时,循环已经完成,i的最后值为2。
您可以通过将i绑定为每个函数的默认参数来解决这个问题。
def fun():
return [lambda x, i=i: i * x for i in range(3)]https://stackoverflow.com/questions/71193403
复制相似问题