函数编程闭包的理解
闭包对初学者还是比较抽象的,其实抛开传统函数的概念当作一种结构实体比较容易理解。
先给出概念
闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数+引用环境)。
这个从字面上很难理解,特别对于一直使用命令式语言进行编程的程序员们。
下文将结合实例代码进行解释。
闭包对初学者还是比较抽象的,其实抛开传统函数的概念当作一种结构实体比较容易理解。
先给出概念
闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数+引用环境)。
这个从字面上很难理解,特别对于一直使用命令式语言进行编程的程序员们。
下文将结合实例代码进行解释。
2015-04-13
===> F(1) for i in range(1, 4) 传变量或参数入F(2) ===> F(2) i= 1 2 3 传变量或参数入F(3) ===> F(3) 计算并 把计算的F(3)的结果和类型 返回 F(2) //这就是返回3个数值而不是一个list的原因 因为F(3)返回值不是一个list ===> F(2)=F(3) 1 4 9 记录结果并传递结果到外面一层 ===> F(1)= f(2)1 4 9 记录的结果是F(3)传递来的 F(1)->F(2)->传入变量->F(3)运算-> 传递结果->F(2)->F(1) F(1) 负责的是输入外部引用环境和函数组合 F(2)F(3)闭包 可以引用外部的环境和函数组合,并直接传出结果 我们看到外部的函数没有参与计算 只负责传入变量 并且传递出结果 。 闭包应该视作一种代码结构 而不是当作函数 这样就容易理解了
def count(): fs = [] for i in range(1, 4): print 'star_zero i=',i def f(j): def g(): print "three" ,"i=",i,'g()=',(j*j) return j*j print "two","i=",i, 'g=' ,j*j return g r = f(i) fs.append(r) print "one","i=",i,"f(i)=", f(i) return fs f1, f2, f3 = count() print "out", f1() print "out", f2() print "out", f3() #print "out0", f1(), f2(), f3() #print "def_count()", def count()
复制黏贴 仔细看输出基本上就没疑惑了
举报