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()
            
  • 相关阅读:
    Appium [安装包] Appium 国内下载地址 (百度云盘,已更新至 AppiumDesktop_1.7.1)(转载)
    PLSQL 触发器
    Java解析Json数据的两种方式
    easyui combobox 动态加载数组数据
    js控制easyui datagrid列的显示和隐藏
    Js中for循环的阻塞机制
    数据库中的视图
    严重:Error configuring application listener of class org.springframework.web.util.IntrospectorCleanupListener
    eclipse背景设置什么颜色缓解眼睛疲劳之一
    Maven详解
  • 原文地址:https://www.cnblogs.com/liuzhiqiang666/p/10120475.html
Copyright © 2011-2022 走看看