python之装饰器(函数)

发布时间:2019-04-22 22:10:29编辑:auto阅读(1831)

    1. 装饰器
      遵循的原则:

        开闭原则:   对功能的扩展开放  对代码的修改是封闭

    # 通用装饰器写法
    # 存在的意义: 在不破坏原有函数和原有函数调用的基础上,给函数添加新的功能.
    
    def wrapper(fn): # fn是目标函数
        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

     2. 带参数的装饰器

    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(True) # 先执行wrapper_out(True) 返回一个装饰器, 再和@拼接 -> @装饰器
    # @wrapper_out(False) # 走,开团
    def yue(): # 被wrapper装饰
        print('走,开团')
    
    yue()

    3. 同一个函数被多个装饰器装饰

    @wrapper1
    @wrapper2
    @wrapper3
    def func():
         pass
    
    # 1  2  3  func 3  2  1

     

关键字