首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我无法理解这个简短的Python代码。有人可以ELI5或指路吗?

我无法理解这个简短的Python代码。有人可以ELI5或指路吗?
EN

Stack Overflow用户
提问于 2022-02-20 10:18:48
回答 1查看 85关注 0票数 0
代码语言:javascript
复制
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中没有相同的地址,所以它们不是实例?

我肯定漏掉了什么东西,但我不知道该往哪个方向去找那件衣服。

清单理解?兰巴斯?装饰师?

EN

回答 1

Stack Overflow用户

发布于 2022-02-20 11:15:42

常见问题中有一个解释。

Python的闭包是后期绑定。这意味着在调用内部函数时会查找闭包中使用的变量的值。 在这里,每当调用任何返回的函数时,都会在调用时在周围的作用域中查找i的值。到那时,循环已经完成,i的最后值为2。

您可以通过将i绑定为每个函数的默认参数来解决这个问题。

代码语言:javascript
复制
def fun():
    return [lambda x, i=i: i * x for i in range(3)]
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71193403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档