def count():
fs = []
for i in range(1, 4):
def f6_1(i):
def f6_2():
return i*i
return f6_2
fs.append(f6_1(i))
return fs
f1, f2, f3 = count()
print f1(), f2(), f3()
fs = []
for i in range(1, 4):
def f6_1(i):
def f6_2():
return i*i
return f6_2
fs.append(f6_1(i))
return fs
f1, f2, f3 = count()
print f1(), f2(), f3()
2015-03-27
最赞回答 / a412739861
因为f(i)在i的值没发生变动的时候,就已经完成计算了。所以f(i)是已经算出来的具体数值了而非之前的调用函数——lazy_sum之类的效果。这个数值已经计算好了。然后i继续迭代。与这里的f(i)已经无关了。
2015-03-27
最新回答 / ffan
对,执行f1, f2, f3 = count()的时候,不会去运行def f():这个函数,但是for循环却会一直执行,而且每次都会将f()追加到fs,但因为没有传入i值,所以每次循环下来追加的都是f(),即为同一个数值,当然会覆盖掉之前的f()!!所以当输入print f1()的时候,此时运行def f():这个函数的时候,i值变为3,返回的就是9了。不知道理解的对不对,如有错,望指正!!
2015-03-27
def __init__(self):
pass
def __call__(self, num):
def g(x):
if x == 0:
return 0
if x == 1:
return 1
else:
return g(x-2) + g(x-1)
return [g(x) for x in range(num)]
pass
def __call__(self, num):
def g(x):
if x == 0:
return 0
if x == 1:
return 1
else:
return g(x-2) + g(x-1)
return [g(x) for x in range(num)]
2015-03-27