求大神看看这个部分是思路总结有木有问题!!!
(错误代码)
def count():
fs = []
for i in range(1, 4):
def f():
return i*i
fs.append(f)
return fs
f1, f2, f3 = count()
其主要的错误原因是由于 fs.append(f)其 append进去的是一个函数,而不是一个函数值,其会首先call f函数,得到return的数值为 i*i,问题在于这个时候的i * i 中的i 是可以随着变化的,最终变化成为了3,导致前面append进去的数值都变成了9。
(正确代码)
def count():
fs = []
for i in range(1, 4):
def f():
return i*i
fs.append(f())
return fs
f1, f2, f3 = count()
print f1, f2, f3
这个知识点最为关键的地方是对于函数和函数值的理解,f 是函数(如果写return f ,这个时候会返回一个函数的地址),但是 f()是函数值是(如果这个时候写 return f(),这个时候会返回一个函数值))
对于上面代码的解决方法在于可以对 fs .append(f)进行更改为 fs.append(f()),即每次添加入list的是一个函数的数值,而函数的数值是不会变化的。最后部分的 print f1(), f2(), f3() 改为print f1, f2, f3,原因是因为当前没有函数,只是函数值。