python 闭包

     闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。闭包在运行时可以有多个实例,不同的引用环境和相同的函数组合可以产生不同的实例。

试试看

def outer_func(a, b): 
    def inner_func(x):
        return a * x + b 
    return inner_func

func = outer_func(2, 3)
print func(4)

   调用outer_func的时候产生了一个闭包inner_func,该闭包持有自由变量a和b

当函数

func = outer_func(2, 3)
执行完成后,a和b两个变量没有消失,因为它被闭包inner_func引用了,所以不会被回收。

把outer_func看成类,inner_func看成实例方法,过程蛮像。

不同的是父函数只在调用时执行,执行完毕后其环境就会释放。

类在文件执行时创建,程序执行完毕后作用域才释放。

因此对一些需要重用的功能且不足以定义为类的行为,使用闭包会更节省资源。

函数工厂,可以闭包来完成:

def max_length(n):
    def validator(s):
        if len(s) < n:
            return
        raise Exception('Length of string must be less than {0}!'.format(n))
    return validator

n=30,如果字符串s的长度大于30,就会抛出异常

装饰器跟闭包也比较像。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值