返回函数
从2-8返回函数就开始搞不懂了????
从2-8返回函数就开始搞不懂了????
2018-07-22
1 def count(): 2 fs = [] 3 for i in range(1, 4): 4 def f(j): 5 def g(): 6 return j*j 7 return g 8 r = f(i) 9 fs.append(r) 10 return fs 11 f1, f2, f3 = count() 12 print f1(), f2(), f3() 第二行是定义了一个list,名称为fs,第三行生成1,2,3序列,并且赋值给i。 我们从第八行看起,当i=1时,将i传入f()之中,f中的j就被赋值了j=i=1, f()中又有一个函数g(),将参数j传入,在g()中返回j*j,也就是1*1,然后f()中又返回g()(注意这里返回的是一个函数,并不是函数值), 也就是g(1),将g(1)这个值赋值给变量r,再将r添加到list中 在count()中将list返回,此时list为 fs=[g(1)]。 然后在当i=2和i=3时,继续上面的循环。
修改版,第一个版本中g(1)是不存在的。因该是一个新函数,详情看下面:
1 def count():
2 fs = []
3 for i in range(1, 4):
4 def f(j):
5 def g():
6 return j*j
7 return g
8 r = f(i)
9 fs.append(r)
10 return fs
11 f1, f2, f3 = count()
12 print f1(), f2(), f3()
第二行是定义了一个list,名称为fs,第三行生成1,2,3序列,并且赋值给i。
从第八行看起,当i=1时,将i传入f()之中,f中的j就被赋值了j=i=1,
f()中又有一个函数g(),将参数j传入,在g()中返回j*j,也就是1*1,然后f()中又返回g()(注意这里返回的是一个函数,并不是函数值),也就是g()其中g中的j已经被传入外层函数的值j=1,将g()这个值赋值给变量r,再将r添加到list中 ,在count()中将list返回,此时list为 fs=[g()],f1=fs=[g()],其中g()中j*j变为1*1,打印的时候f1()运行的是
def g():
return 1*1
然后在当i=2和i=3时,继续上面的循环。
举报