Python 闭包实现

引言

        闭包这个概念用的比较广泛。在Javascript,Perl很多场合使用到,当然Python也有闭包的实现。下面是自己的理解。关于闭包是指函数的内部定义一个函数,该函数用到外面函数的变量,使得在内部函数结束的时候没有清除所用到的变量(对于内部函数来说是局部变量).这样的好处在于可以有逻辑的修改全局变量。这里再简单介绍下关于perl的,perl中的闭包主要用于面向对象,是实现了数据的封装。

代码1:

def  f():
    count=0 #声明计数变量
    def wrap():
        count+=1 #计数加1
        return count #返回值
    return wrap 返回函数地址

f1=f() #调用f()函数,返回的是一个wrap函数地址
f() #调用wrap()函数
f() #调用wrap()函数
f() #调用wrap()函数

结果却报错: 


原来在Python语法中对于全局变量是可以随便访问的,但是如果修改全局变量是不行的。如果要修改需要将其声明为列表类型。

因为python在内部调用变量的时候,是按照声明来处理,此时如果对变量操作则报没有赋值的错误.

代码2:

def  f():
    count=[0] #声明计数变量,此处修改为列表类型
    def wrap():
        count[0]+=1 #计数加1
        print count[0] #返回值
    return wrap 返回函数地址

f1=f() #调用f()函数,返回的是一个wrap函数地址
f() #调用wrap()函数
f() #调用wrap()函数
f() #调用wrap()函数

结果执行


        这样就是实现了简单的闭包函数,使得函数类似于类一样,具有面向对象的性质。除了上面的调用方式,还可以使用装饰器来简化。

猜你喜欢

转载自blog.csdn.net/whitenigt/article/details/80069927