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
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    TensorFlow object detection API
    bounding box的简单理解
    OverFeat学习
    tensorflow调试tfdbg
    2018.7-2019.4记录
    人工智能未来读后感 ----by RayKurzweil
    matlab exe
    神经网络的基础
    研究生的论文
    卷积神经网络经验
  • 原文地址:https://www.cnblogs.com/zy7y/p/14782663.html
Copyright © 2011-2022 走看看