zoukankan      html  css  js  c++  java
  • 使用递归替换参数${变量}

    
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    """
    @Project: py-gql-fast-test-api
    @File: handle.py
    @Author: zy7y
    @Time: 2021/3/31 16:48
    @Blog: https://www.cnblogs.com/zy7y
    @Github: https://gitee.com/zy7y
    @Desc: 处理方法
    """
    
    
    class Handle:
        var_pool = {}
    
        @staticmethod
        def set_var(key: object, value: object):
            """存变量"""
            Handle.var_pool[key] = value
    
        @staticmethod
        def get_var(key: object, default: object = None):
            """取变量"""
            return Handle.var_pool.get(key, object)
    
        @staticmethod
        def handle_var_list(value: list):
            """
            处理参数替换~ 类型是list的逻辑
            """
            for index, liv in enumerate(value):
                if isinstance(liv, str) and liv[:2] == '${' and liv[-1] == '}':
                    # 获得key部分内容
                    liv = liv[2:-1]
                    # 取到key对应的value,复制给当前下标
                    value[index] = Handle.get_var(liv)
                elif isinstance(liv, list):
                    # 如果 子元素还是 list 就再迭代list
                    Handle.handle_var_list(liv)
                elif isinstance(liv, dict):
                    # 如果子元素是 dict 就再迭代字典
                    Handle.handle_var(liv)
    
        @staticmethod
        def handle_var(var: dict) -> dict:
            """处理自定义参数类型"""
            for key, value in var.items():
                # 如果是字典就 迭代字典
                if isinstance(value, dict):
                    Handle.handle_var(value)
                # 如果是list 就迭代list, 递归 list处理方法
                elif isinstance(value, list):
                    Handle.handle_var_list(value)
                # 如果是str 就替换
                elif isinstance(value, str) and value[:2] == '${' and value[-1] == '}':
                    # 获得key部分内容
                    value = value[2:-1]
                    # 取到key对应的value
                    var[key] = Handle.get_var(value)
            return var
    
    
    if __name__ == '__main__':
    
        Handle.var_pool = {"name": "att", "age": 18, "height": 17.8}
        # 需要处理的字典
        data = {
            #  字典 提取
            "name": "${name}",
            # 字典嵌套字典提取
            "info": {"${name}": ["${age}", "${height}"]},
                "lists": ["${name}", ["${age}", "${height}"], {"name": "${name}"}]
    
        }
        print(Handle.handle_var(data))
    

    可能有Bug

    作者:zy7y
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    【郑轻邀请赛 G】密室逃脱
    【郑轻邀请赛 C】DOBRI
    【郑轻邀请赛 F】 Tmk吃汤饭
    【郑轻邀请赛 I】这里是天堂!
    【郑轻邀请赛 B】base64解密
    【郑轻邀请赛 A】tmk射气球
    【郑轻邀请赛 H】 维克兹的进制转换
    解决adb command not found以及sdk环境配置
    adb shell 命令详解,android, adb logcat
    Unexpected exception 'Cannot run program ... error=2, No such file or directory' ... adb'
  • 原文地址:https://www.cnblogs.com/zy7y/p/14782663.html
Copyright © 2011-2022 走看看