Python 闭包代码理解?

def count(): fs = [] for i in range(1, 4): def f(): return i*i fs.append(f) return fs f1, f2, f3 = count() #这段代码的流程能叙述下吗,刚接触,有点晕
关注者
71
被浏览
7,840

16 个回答

调用count执行完,i已经是3了,def f()中的代码并没有执行,后期再调用f1() f2() f3(),结果就是9了啊。
1,python里面所有都是对象,函数也是,你把闭包函数当成一个变量对象来理解,就很清楚了
2,和其他普通对象比如字符串,数字的区别在于,这个闭包函数对象是callable的,而且call的过程中还能引用“外面”的变量,比如题目例子中的i
3,之所以2种“外面”两个字加引号,是因为看起来是外面,实际不是外面,他们都在一个命名空间,你随便声明一个a=1,再看locals()里面肯定有a在里面