python之闭包

闭包

enclosing:函数内部与内嵌函数之间的变量
闭包(Closure):内部函数对enclosing作用域的变量进行引用,延长其使用寿命
下面以成绩判断方式为例:
一、普通的函数判断

#cloding:utf-8
def cmp(val, passline):
    if val >= passline:
        print('pass')
    else:
        print('failed')
cmp(59, 60)#函数执行完成passline变量也就被回收
cmp(90, 60)

运行结果:
failed
pass
这种方式在调用的过程中需要在使用时不断输入判断基础值,并且方式比较局限
二、闭包实例一
直接返回比较的函数对象

#coding:utf-8
def set_passline(passline):
    def cmp(val):
        if val >= passline:
            print("pass")
        else:
            print("failed")
    return cmp

f = set_passline(60)#返回函数对象cmp,这步完成后其中passline变量没有被释放
f(90)
f(50)
f(30)

运行结果为:
pass
failed
failed

三、闭包实例二
将比较函数对象当作参数,提高代码的可重复使用性

#cloding:utf-8
def set_passline(passline):
    def cmp(val):
        if val >= passline:
            print("pass")
        else:
            print("failed")
    return cmp

def judge(func):
    def in_judge(*arg):
        if len(arg) == 0:
            return 0
        for val in arg:
            if not isinstance(val, int):
                return 0
        return func(*arg)
    return in_judge

fcmp_100 = set_passline(60)
fcmp_150 = set_passline(90)

fcmp_100 = judge(fcmp_100)
fcmp_150 = judge(fcmp_150)

fcmp_100(80)
fcmp_100(50)

fcmp_150(100)
fcmp_150(60)

运行结果:
pass
failed
pass
failed

类似与c/c++中的回调函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值