引言
闭包这个概念用的比较广泛。在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()函数
结果执行