閉包與裝飾器

閉包 :

内外函數嵌套,内函數引用外函數的非全局變量,外函數返回内函數對象

作用 :保存外部函数的变量,不会随着外部函数调用完而销毁

优点: 为变量续命

缺点: 浪费内存

#函數嵌套

def func_out():

    #定義外部函數
    num1 = 10


    def func_inner(num2):
        #定義内部函數
        
        #内部函數引用外部函數變量  num1

        result = num1 + num2
        
        print('結果',result)


       # 外函數返回内函數
        
     return func_inner

# 實例化func_out 對象

new_func = func_out()

# 執行並傳參

new_func(1)

裝飾器:

基於閉包實現,在不改變源碼的情況下給函數添加新的功能,是内部閉函數

有參數:就是一个原有基础上在外面加一个函数,形成一个闭包,这样函数的参数就是一个闭包的外部参数,不会随着环境改变。

import time   #引用time模块
def log_time(func):
    def log_wrapper(a, b):  #给绑定的内置函数传参
        print(time.ctime())
        func(a, b)   #将传递的参数赋给定义的func参数
        print(time.ctime())
    return log_wrapper   #返回局部变量

def func_test(a, b):  #给装饰器传参

    print(a, b)

log_wrapper = log_time(func_test)  
log_wrapper(1, 2)

 

如何将一个闭包转换为一个装饰器

装饰器的 外部函数的参数   是一个函数 

内部函数 的参数是    *args, **kwargs    可以接收任意参数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值