这个怎么理解?
def count():
fs = []
for i in range(1, 4):
def f(j):
def g():
return j*j
return g
r= f(i)
fs.append(r)
return fs
f1, f2, f3 = count()
print f1(), f2(), f3()
请问其中的
def f(j):
def g():
return
怎么理解 里面的j是什么意思?
def count():
fs = []
for i in range(1, 4):
def f(j):
def g():
return j*j
return g
r= f(i)
fs.append(r)
return fs
f1, f2, f3 = count()
print f1(), f2(), f3()
请问其中的
def f(j):
def g():
return
怎么理解 里面的j是什么意思?
2016-03-09
我想题主想问的是为什么下面这段代码没有进行延时处理吧?
def f(j): def g(): return j*j return g
对这个问题,我也想了半天,做了一些实验,实验得出结论应该是:python加载函数时是懒加载方式的,也就是说,当调用函数时,函数才会运行,不调用时,就不会运行。
所以关键问题出下以下语句:
r= f(i)
f函数被调用了,那么i参数就被换成了循环值的,其时这时候g函数实际还没有运行。但这个无所谓,因为整个f函已经被写入内存,放入了list表了,i参数也就确定下来了。
以下是在python3版本中测试的代码,可以看到j每次都会变化的,但最终输出结果还是3个9,就是因为d函数没有在循环中调用过,所以最后取值还是延时的3,,,,
def a(): fs = [] for x in range(1,4): def b(j): print (j,"=============") return j*j def d(): c=b(x) return c fs.append(d) return fs f1,f2,f3=a() print(f1(),f2(),f3())
希望以上内容能有所帮助。
如有错误也请指出,我也是刚学到这里,希望一起努力。
举报