• 装饰器


    装饰器
    开闭原则:
        对功能的扩展开发
        对代码修改是封闭的
     
     
    语法:
    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()
            
  • 相关阅读:
    redis 初探
    RAID,mdadm(笔记)
    EXT2文件系统
    压缩、解压缩命令(笔记)
    shell编程while
    软连接、硬链接、磁盘分区管理(笔记)
    磁盘管理(笔记)
    恢复Linux下被误删除的文件(笔记)
    Linux下高效数据恢复软件extundelete应用实战
    RedHat安装GCC问题-解决依赖问题
  • 原文地址:https://www.cnblogs.com/liuzhiqiang666/p/10120475.html
Copyright © 2020-2023  润新知