代码执行过程简单分析,看了好久才看懂真是笨得要死。
Topic source真是醉了,有些地方需要添加使之更容易看懂。 第二个分析中写的有些小错误。 第一个修正版:
#执行
count():
#fs=空列表list
fs = []
for i in range(1,4):
#def定义跳过
def f():
return i*i
#从i=1开始执行fs.append(f)
#i=1,得到是函数f(),结果fs=[f()]
#i=2,同上f(),结果fs=[f(),f()]
#i=3,同上f(),结果fs=[f(),f(),f()]
fs.append(f)
#返回fs=[f(),f(),f()]
return fs
#f1=f()=i*i=f2=f3,i已经列举到了i=3了,所以都等于9
f1,f2,f3 = count()
第二个修正版
#执行
count():
def f(j):
def g():
return j*j
return g
#fs=空list
fs = []
for i in tange(1,4):
#从i=1开始执行
#i=1,执行f(1),创建临时函数g1()=g(),条件j=1,得到结果fs=[g1()]
#i=2,创建g2()=g(),条件j=2,得到fs=[g1(),g2()]
#i=2,同上,得到fs=[g1(),g2(),g3()]
fs.append(f(i))
#返回fs=[g1(),g2(),g3()],可以视作fs=[g(1),g(2),g(3)]
return fs
#f1=g1()=1*1,f2=2*2,f3=3*3
f1,f2,f3 = courn()
也没有多大影响。
- 1
Dreamer_DK
轻喷,欢迎指正
闭包第一个:
第二个:
第一个函数fs列表里面得到的返回值都是f()。 而第二个fs列表里得到的值其实是三个不同的运算f(1),f(2),f(3)的结果。 所以第二个表面上看起来得到的是三个g(),但实际上是f(1),f(2),f(3)函数中分别提取出来的g(),实际上是不同的。
欢迎指正。