源自:2-9 python中闭包
之前学过c 这段python可不可以这样理解
#给出的错误答案
# 希望一次返回3个函数,分别计算1x1,2x2,3x3:
def count():
fs = []
for i in range(1, 4):
#上面这个i并不会因为count函数的结束而回收内存,值也会一直保存,
#这个i只有count函数内才可以访问,即使是在只调用count里的内层函数时
def f():
return i*i
#这里的i是是指向第四行创建的i的地址
#并不是创建了新的一块内存空间
fs.append(f)
return fs
f1, f2, f3 = count()
#给出的标准答案
def count():
fs = []
for i in range(1, 4):
def f(j):
#每次运行都为j创建一块新的内存,并保存传来的值,且所有的都不会被销毁
def g():
return j*j
#这个j指向运行f函数时创建j的内存地址
return g
r = f(i)
#运行f函数返回g函数,返回的g中j都是指向(当前运行f时新创建的的内存)
#每个g函数都是不一样的
fs.append(r)
return fs
f1, f2, f3 = count()
print f1(), f2(), f3()
提问者:122138763238273
2017-07-25 22:35