请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

11-12闭包的定义

老师老师,我在后面的学习中,出现了这样的问题:

1、为什么这个是属于闭包呢,我在里面引用了x了耶https://img1.sycdn.imooc.com//szimg/5b4ea996000123ca07700516.jpg

2、为什么我把return修改之后他就不是闭包了呢,不是说跟return无关的吗

https://img1.sycdn.imooc.com//szimg/5b4ea9e200012d2706690508.jpghttps://img1.sycdn.imooc.com//szimg/5b4eaa2500011fc907060507.jpg

麻烦老师了

正在回答

3回答

我对你这个问题有解答的,第一个为什么是闭包的原因是:你在go函数里面引用了pos这个变量,并且使用了他,所以形成了闭包,而pos是在外围的factory函数里面进行定义的,执行一下print(t.__closure__[0].cell_contents)这个语句,你就会发现结果是0,而pos在函数调用的使用,被origin替换,被换成了0,所以打印为0,而后两个图都不是闭包的原因是没有引用pos这个外部定义的变量,自然不是闭包

ps:我想撤回我之前的回答,我感觉好像错了

2 回复 有任何疑惑可以回复我~
  • 非常感谢!,厉害厉害
    回复 有任何疑惑可以回复我~ 2018-08-03 08:34:38
  • 今天看了一下今年8月自己的回答 我已经看不懂自己写的什么了 好惊恐
    回复 有任何疑惑可以回复我~ 2019-02-15 23:41:12
光荣交白卷哥 2018-08-02 23:54:19
origin = 0 


def factory(pos):
x = 10 

def go():
x = 20 
print(pos)
return go
tourist = factory(origin)
print(tourist)
print(tourist.__closure__)


1 回复 有任何疑惑可以回复我~
7七月 2018-07-19 10:03:12

你咋说 没有return就不是闭包了呢,是基于什么判断的?

0 回复 有任何疑惑可以回复我~
  • 因为我调用了那个内置变量__closure__,他返回的结果是None,我就以为他不是闭包了,这样也算是的吗
    回复 有任何疑惑可以回复我~ 2018-07-19 11:31:10
  • 就我个人所理解的内容来说,你这个程序返回none是正常的,因为本身就没有返回值,自然是none了,不过我有一个问题就是,如果是返回了none,那么自然是没有__closure__,那么是如何是否形成了闭包呢
    回复 有任何疑惑可以回复我~ 2018-08-02 23:25:57
  • 蒋一筒 回复 提问者 天上掉下个小馅饼 #3
    没有 closure 属性就不是闭包,所以你返回 None 就说明它不是闭包。但是这里不是闭包和有没有 return 没有关系,而是因为你唯一的外部环境变量 pos 在你原来return的值里,正如那位小哥说的那样。
    回复 有任何疑惑可以回复我~ 2019-02-14 14:55:08
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信