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

装饰器

时间:2018-12-14 19:54:14      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:结束   代理   函数传参   als   return   python   int   基础   意义   

装饰器
开闭原则:
    对功能的扩展开发
    对代码修改是封闭的
 
 
语法:
def wrapper(fn):                                       ‘‘‘‘fn是目标函数,target_func
        def inner(*args,**kwargs):                ‘‘‘‘为了目标函数传参‘‘‘‘
                ‘‘‘在执行目标函数之前‘‘‘
                ret = fn (*args,**kwargs)          ‘‘‘‘调用目标函数,ret是目标函数的返回值
                ‘‘‘在执行目标函数之后‘‘‘‘
                return ret                                  ‘‘‘‘把目标函数返回值返回,保证函数正常结束
        return inner
@wrapper                                                 ‘‘‘‘‘‘target_func=wrapper( target_func )‘‘‘
def target_func( ) :
        pass
target_func( )                                             ‘‘‘‘此时执行的是inner‘‘‘‘
 
装饰器存在意义:
1.python里的动态代理
2.不破坏原有的函数和原有的函数调用的基础上,给函数添加新功能
 
 
多个函数被多个装饰器装饰:
        def wrapper1(fn):                                 
        def inner(*args,**kwargs):                
                ‘‘‘在执行目标函数之前‘‘‘
                ret = fn (*args,**kwargs)          
                ‘‘‘在执行目标函数之后‘‘‘‘
                return ret                                  
        return inner
 
        def wrapper2(fn):                                 
        def inner(*args,**kwargs):                
                ‘‘‘在执行目标函数之前‘‘‘
                ret = fn (*args,**kwargs)          
                ‘‘‘在执行目标函数之后‘‘‘‘
                return ret                                  
        return inner
 
        def wrapper3(fn):                                 
        def inner(*args,**kwargs):                
                ‘‘‘在执行目标函数之前‘‘‘
                ret = fn (*args,**kwargs)          
                ‘‘‘在执行目标函数之后‘‘‘‘
                return ret                                  
        return inner
 
        @ wrapper1
         @wrapper2
        @ wrapper3
        
        def func():
            pass
        fun()
执行顺序
1 2 3 func 3 2 1
 
 
def wrapper_out(flag):
    def wrapper(fn):
        def inner(*args,**kwargs):
            if flag==True:
                print(‘问问金老板‘)
                ret=fn(*args,**kwargs)
                print(‘金老板骗我‘)
                return ret
            else:
                ret = fn(*args, **kwargs)
                return ret
        return inner
    return wrapper
@wrapper_out(False)
def yue():
print(‘走,约‘)
yue()
        

装饰器

标签:结束   代理   函数传参   als   return   python   int   基础   意义   

原文地址:https://www.cnblogs.com/liuzhiqiang666/p/10120475.html

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