类型一:原因就在于返回的函数引用了变量i
,但它并非立刻执行。等到3个函数都返回时,它们所引用的变量i
已经变成了3
,因此最终结果为9
def count():
fs = []
for i in range(1, 4):
def f():
return i*i
fs.append(f)
return fs
f1, f2, f3 = count()
>>> f1()
9
>>> f2()
9
>>> f3()
9
类型二:
def count():
def f(j):
def g():
return j*j
return g
fs = []
for i in range(1, 4):
fs.append(f(i)) # f(i)立刻被执行,因此i的当前值被传入f()
return fs
>>> f1, f2, f3 = count()
>>> f1()
1
>>> f2()
4
>>> f3()
9
类型三:
def cout2():
def f(j):
return j*j
fs=[]
for i in range(1,4):
fs.append(f(i))
return fs
f1,f2,f3=cout2()
>>> f1
1
>>> f2
4
>>> f3
9
关于类型二和类型三的对比,如果类型二中输入f1返回的则是函数,而在类型三中输入f1返回的则是数值。因为在类型二列表中添加的是函数,类型三列表中添加的是数值。