我这样写也能运行成功,帮我看看有没有什么不合理的地方呢?
def count():
fs = []
for i in range(1, 4):
def f(i):
return i*i
fs.append(f(i))
return fs
f1, f2, f3 = count()
print f1, f2, f3
def count():
fs = []
for i in range(1, 4):
def f(i):
return i*i
fs.append(f(i))
return fs
f1, f2, f3 = count()
print f1, f2, f3
2019-02-18
个人理解:
在原题目中fs.append(f)是向fs这个list中新增了函数(函数成为了list的元素),并且该函数还并未被调用,也就是没有运行,也就没有计算i*i的值,函数中的变量i会随着for循环而改变,循环了3次,i的值最终变成了3。
这段代码f1, f2, f3 = count(),是将count中的元素按顺序分别赋给变量f1,f2,f3,在最后调用函数f1(),f2(),f3()时,才进行了i*i的计算,此时i=3,所以结果都是9。
你的代码fs.append(f(i))此时已经调用了函数f(),且进行了i*i的计算,并把计算的值加进了fs这个list,计算后得出的值是不会改变的,成为了fs的一个元素。
你的代码运行结果,此时count()就是list [1,4,9]
你的代码最后f1, f2, f3 = count(),其实就是把1,4,9分别赋给了f1,f2,f3。
举报