采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师老师,我在后面的学习中,出现了这样的问题:
1、为什么这个是属于闭包呢,我在里面引用了x了耶
2、为什么我把return修改之后他就不是闭包了呢,不是说跟return无关的吗
麻烦老师了
我对你这个问题有解答的,第一个为什么是闭包的原因是:你在go函数里面引用了pos这个变量,并且使用了他,所以形成了闭包,而pos是在外围的factory函数里面进行定义的,执行一下print(t.__closure__[0].cell_contents)这个语句,你就会发现结果是0,而pos在函数调用的使用,被origin替换,被换成了0,所以打印为0,而后两个图都不是闭包的原因是没有引用pos这个外部定义的变量,自然不是闭包
ps:我想撤回我之前的回答,我感觉好像错了
非常感谢!,厉害厉害
今天看了一下今年8月自己的回答 我已经看不懂自己写的什么了 好惊恐
origin = 0 def factory(pos): x = 10 def go(): x = 20 print(pos) return go tourist = factory(origin) print(tourist) print(tourist.__closure__)
你咋说 没有return就不是闭包了呢,是基于什么判断的?
因为我调用了那个内置变量__closure__,他返回的结果是None,我就以为他不是闭包了,这样也算是的吗
就我个人所理解的内容来说,你这个程序返回none是正常的,因为本身就没有返回值,自然是none了,不过我有一个问题就是,如果是返回了none,那么自然是没有__closure__,那么是如何是否形成了闭包呢
没有 closure 属性就不是闭包,所以你返回 None 就说明它不是闭包。但是这里不是闭包和有没有 return 没有关系,而是因为你唯一的外部环境变量 pos 在你原来return的值里,正如那位小哥说的那样。
登录后可查看更多问答,登录/注册
语法精讲/配套练习+思考题/原生爬虫实战
5.7k 7
2.5k 3
2.2k 5
4.2k 22
2.3k 19