• 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
  • 相关阅读:
    python基础之元组、文件操作、编码、函数、变量
    python---基础之模块,列表,元组,字典
    python成长之路-----day1-----作业(登录程序和三级菜单)
    k8s的port、targetport、nodeport之间的区别
    查找并删除文件
    systemctl自定义service
    中标麒麟7.0源
    springboot问题,没有主清单属性
    iso搭建本地源
    添加路由
  • 原文地址:https://www.cnblogs.com/q455674496/p/10119309.html
Copyright © 2020-2023  润新知