zoukankan      html  css  js  c++  java
  • python之装饰器(函数)

    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
  • 相关阅读:
    【HDU】2461 Rectangles
    【POJ】2409 Let it Bead
    【HDU】3208 Integer’s Power
    【HDU】1812 Count the Tetris
    【POJ】2888 Magic Bracelet
    【HDU】2865 Birthday Toy
    黑白色的华为(6) 不是银弹的银弹
    黑白色的华为(10) 不是答案的答案
    ubuntu上升级cmake到3.16版本
    黑白色的华为(8) 从加法到减法
  • 原文地址:https://www.cnblogs.com/q455674496/p/10119309.html
Copyright © 2011-2022 走看看