闭包、装饰器

闭包

在函数内部再定义一个函数,并且这个函数用到了外边函数的变量,那么将这个函数以后用到的一些变量叫做闭包

由于闭包引用了外部函数的局部变量,则外部函数的局部变量没有及时释放,消耗内存

闭包的特点
  • 外部函数内部定义函数
  • 外部函数返回内部函数的引用
  • 内部函数可以直接使用外部函数的环境变量

  • 函数名指向了函数代码空间的对象
  • 语法:
  • 外部函数通过返回内部函数的引用
  • 内部函数可以直接使用外部函数的-环境变量 自由变量

装饰器

--装饰目的:

  • 在不修改代码的情况,对代码拓展新的功能

--装饰器功能

  • 引入日志
  • 函数执行时间统计
  • 执行函数前预备处理
  • 执行函数后清理功能
  • 权限校验等场景
  • 缓存

--装饰器特点

  • 必须是闭包的形式

  • 有且只有一个参数 -指向了被装饰的函数的引用

  • 使用装饰器@装饰器名 等价于 f1=yanzheng(1)

# 装饰器函数特点 新增一个功能根据参数flag参数不同 '1' 使用整数输出时间差
# 使用的是其他数据 以浮点数输出时间
def get_run_time(flag):
    def gettime(func):
        def inner(*args, **kwargs):
            begin = time.time()
            ret = func()
            end = time.time()
            if flag == '1':
                print("函数运行花费了%d s" % int(end-begin))
            else:
                print("函数运行花费了%f s" % (end-begin))
            return ret
        return inner
    return gettime
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值