闭包的讨论
老师能解释一下 为什么不能写成这样 def count(): fs = [] for i in range(1, 4): def f(j): return j*j r = f(i) fs.append(r) return fs print count() [1, 4, 9] #反回 [1, 4, 9] #正确返回1 4 9 老师写的也我能理解,但是两种结构区别不理解 为什么一个返回 list 一个返回3个数值
老师能解释一下 为什么不能写成这样 def count(): fs = [] for i in range(1, 4): def f(j): return j*j r = f(i) fs.append(r) return fs print count() [1, 4, 9] #反回 [1, 4, 9] #正确返回1 4 9 老师写的也我能理解,但是两种结构区别不理解 为什么一个返回 list 一个返回3个数值
2015-04-13
def count(): fs = [] for i in range(1, 4): def f(j): return j*j r = f(i) fs.append(r) #r是函数f()计算后的返回值,是int型对象,所以fs当然是一个有3个整数的list return fs print count()
def count(): fs = [] for i in range(1, 4): def f(j): def g(): return j*j return g r = f(i) #r是g()的闭包 fs.append(r) #fs存的将是g()闭包的三个实现,分别是在输入为1,2,3的时候 return fs f1, f2, f3 = count() #f1,f2,f3就是这三个闭包 print f1(), f2(), f3() #加()后就是函数的求值,所以f1()就相当于call g(1),返回值就是1,f2()就相当于call g(2),返回值就是4等
希望对你有帮助
举报