zoukankan      html  css  js  c++  java
  • 装饰器

    装饰器
    开闭原则:
        对功能的扩展开发
        对代码修改是封闭的
     
     
    语法:
    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()
            
  • 相关阅读:
    Lua/AHK socket tcp telnet
    Lua wait sleep
    Lua io.open read write seek flush setvbuf append
    stream file 文件 数据流
    AHK通讯 CMD Lua IPC
    零散 Lua/Excel/''/iup
    Windows Program File(x86) 路径 环境变量
    条件正则过滤筛选 V2
    条件正则过滤筛选 V1
    python导包出现的问题
  • 原文地址:https://www.cnblogs.com/liuzhiqiang666/p/10120475.html
Copyright © 2011-2022 走看看