一、装饰器基础

1、装饰器最初的形成

import time
def timer(func): #timer是装饰器函数
    def inner():
       print(time.time())
       func()  #f是被装饰的函数
       time.sleep(0.01)
       print(time.time())
    return inner
def fun():
    print('哇哈哈哈ha')

fun=timer(fun)#把inner的内存地址赋值给变量fun
fun()

#装饰器的作用 —— 不想修改函数的调用方式 但是还想在原来的函数前后添加功能
#timer就是一个装饰器函数,只是对一个函数 有一些装饰作用

2、装饰器函数

import time
def timer(func): #timer是装饰器函数
    def inner():
       print(time.time())
       func()  
       time.sleep(0.01)
       print(time.time())
    return inner
@timer   #语法糖 @装饰器函数名
def fun():#f是被装饰的函数
    print('哇哈哈哈ha')

#fun=timer(fun)#把inner的内存地址赋值给变量fun
fun()



3、带返回值的装饰器



def timmer(f):    #装饰器函数
    def inner():
        start = time.time()
        ret = f()       #被装饰的函数
        end = time.time()
        print(end - start)
        return ret
    return inner

@timmer         #语法糖 @装饰器函数名
def func():     #被装饰的函数
    time.sleep(0.01)
    print('老板好同事好大家好')
    return '新年好'
#func = timmer(func)
ret = func()   #inner()
print(ret)


#装饰带参数函数的装饰器
def timmer(f):    #装饰器函数
    def inner(*args,**kwargs):
        #(1,2) /(1)
        start = time.time()
        ret = f(*args,**kwargs)  #f(1,2)       #被装饰的函数
        end = time.time()
        print(end - start)
        return ret
    return inner

@timmer         #语法糖 @装饰器函数名
def func(a,b):     #被装饰的函数
    time.sleep(0.01)
    print('老板好同事好大家好',a,b)
    return '新年好'

@timmer         #语法糖 @装饰器函数名
def func1(a):     #被装饰的函数
    time.sleep(0.01)
    print('老板好同事好大家好',a)
    return '新年好'
#func = timmer(func)
ret = func(1,2)   #inner()
ret = func(1,b = 2)   #inner()
print(ret)

4、装饰器的固定格式



 def wrapper(f):    #装饰器函数,f是被装饰的函数
    def inner(*args,**kwargs):
        '''在被装饰函数之前要做的事'''
        ret = f(*args,**kwargs)    #被装饰的函数
        '''在被装饰函数之后要做的事'''
        return ret
    return inner

@wrapper         #语法糖 @装饰器函数名
def func(a,b):     #被装饰的函数
    time.sleep(0.01)
    print('老板好同事好大家好',a,b)
    return '新年好'

总结



# 装饰器
# 开发原则 : 开放封闭原则
# 装饰器的作用 :在不改变原函数的调用方式的情况下,在函数的前后添加功能
# 装饰器的本质 : 闭包函数

 def wrapper(func):
     def inner(*args,**kwargs):
         print('在被装饰的函数执行之前做的事')
         ret = func(*args,**kwargs)
         print('在被装饰的函数执行之后做的事')
         return ret
     return inner

 @wrapper   #holiday = wrapper(holiday)
def holiday(day):
     print('全体放假%s天'%day)
     return '好开心'

 ret = holiday(3)
 print(ret)



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值