码迷,mamicode.com
首页 > 其他好文 > 详细

装饰器

时间:2019-02-06 21:16:35      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:love   %s   rgs   style   模式   固定   src   date   rap   

? 装饰器的作用 —— 不修改函数的调用方式 但想在原来的函数前后添加功能,可以有多个装饰器,但只对一个函数,有一些装饰作用

? 原则: 开放封闭原则     开放 :扩展是开放的      封闭 :对修改是封闭的

? 图解

技术图片

? 装饰器例子

def wrapper(f):    # 这是装饰器函数  f是被装饰的函数名
    def inner(*args,**kwargs):
        ‘‘‘在被装饰函数之前要做地事‘‘‘
        res = f(*args,**kwargs)      # 动态参数*args,**kwargs要原封不动地传给被装饰的函数f,且被装饰函数执行完的返回值要返回给res接收
        ‘‘‘在被装饰函数之后要做地事‘‘‘
        return res
    return inner

 ? 

技术图片

 

# 装饰器的固定模式
def wrapper(func):     # 5 而func就是qqxing
    def inner(*args,**kwargs):
        res = func(*args,**kwargs)     # 1 被装饰函数需要参数和返回值是res(以res接收它的返回值)  #被装饰的函数func(*args,**kwargs)
        return res                     # 2 再把res返回给“我”
    return inner

@wrapper         # 3 等同于 qqxing = wrapper(qqxing),把下面函数的名字作为参数且执行完装饰器函数(wrapper)之后的返回的inner还叫qqxing  
def qqxing():    # 4 qqxing()函数“使用”了 wrapper 装饰器
    print(520)
    
res = qqxing()  # 6 而qqxing此刻是inner,因为qqxing = wrapper(qqxing)中执行完wrapper(qqxing)之后返回的qqxing以res接收返回值                                                                                       
print(res)

 

 ?

技术图片

def wrapper(func):
    def inner(*args,**kwargs):
        print(在被装饰的函数执行之前做的事)
        ret = func(*args,**kwargs)
        print(在被装饰的函数执行之后做的事)
        return ret
    return inner  # 把inner的内存地址返回回来,让下一行注释的lover接收
@wrapper          # 等效于lover = wrapper(lover)
def lover(date):
    print(We have been %s days falling in love% date )
    return love story
ret = lover(24)
print(ret)

 

 

def outer(*args,**kwargs):
    print(args)
    print(*args)
    def inner(*args):
        print(inner:,args)
    inner(*args)
outer(1,2,3,4)
# 关于*args,接收就是聚合,调用就是打散

装饰器

标签:love   %s   rgs   style   模式   固定   src   date   rap   

原文地址:https://www.cnblogs.com/passengerlee/p/10354014.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!