因为业务需要,我需要创建一个可以在多模块公用全局变量,根据https://www.jianshu.com/p/6cee728f3490的代码,因为他提供的只能生成 { k: v, kk: v ... } 的数据格式

我需要构建二维的全局变量格式,是 { { k: v }, { k: v} ... } 的结构,就对代码进行了一些改动,供大家学习参考

class GlobalMap:
# 拼装成字典构造全局变量 借鉴map 包含变量的增删改查
map = {"default": {}}

def set_map(self, key, value, group="default"):
if isinstance(value, dict):
value = json.dumps(value)
if group in self.map: # 判断key是否存在
if key in self.map[group]:
self.map[group][key] = value
else:
self.map[group].setdefault(key, value)
else:
self.map.setdefault(group, {key: value})

def set(self, group="default", **keys):
try:
for key_, value_ in keys.items():
self.map[group][key_] = str(value_)
          log.debug(key_ + ":" + str(value_))
        except BaseException as msg:
log.error(msg)
raise msg

def del_map(self, key, group="default"):
try:
del self.map[group][key]
return self.map
except KeyError:
log.error(f" '{group}' 或 key:'{str(key)}' 不存在")

def get(self, *args, group="default"):
try:
dic = {group: {}}
for key in args:
if args[0] == 'all' and len(args) == 1:
dic[group] = self.map[group]
elif len(args) == 1:
dic[group] = self.map[group][key]
log.debug(group + "->" + key + ":" + str(dic))
else:
dic[group][key] = self.map[group][key]
return dic[group]
except KeyError:
log.error(f" '{group}' 或 key:'{str(key)}' 不存在")
return 'Null_'

测试代码

    a = GlobalMap()
a.set_map("aa", "66", group="demo")
a.set_map("bb", "77", group="demo")
a.set_map("cc", "88", group="demo")
print(a.map)
c = a.get("aa", "bb", group="demo")
print(c)

输出结果

1. {'default': {}, 'demo': {'aa': '66', 'bb': '77', 'cc': '88'}}
2. {'aa': '66', 'bb': '77'}

input

1. c = a.get("aa", group="demo")

output

1. 66

input

c = a.get("all", group="demo")

output

{'aa': '66', 'bb': '77', 'cc': '88'}

如果对你有帮助的话麻烦一键三连哦(*^_^*)

python_跨文件二维全局变量传参的更多相关文章

  1. C++中用二维数组传参时形参该怎样写[转]

    二维数组的存储方式是和一维数组没什么区别,但是用二维数组做参数,它的形参该怎样写? 要注意的是:函数中的形参其实就相当于一个声明,并不产生内存分配,形参的目的就是要让编译器知道函数参数的数据类型. 正 ...

  2. C语言学习笔记 (006) - 二维数组传参的三种表现形式

    # include <stdio.h> # include <stdlib.h> # define M # define N int getdate(int (*sp)[M]) ...

  3. [转]ASP.NET MVC学习系列(二)-WebAPI请求 传参

    [转]ASP.NET MVC学习系列(二)-WebAPI请求 传参 本文转自:http://www.cnblogs.com/babycool/p/3922738.html ASP.NET MVC学习系 ...

  4. angularjs简单实现$http.post(CORS)跨域及$http.post传参方式模拟jQuery.post

    1.开启angularjs的CORS支持 .config(function($httpProvider) { // CORS post跨域配置 $httpProvider.defaults.useXD ...

  5. php 二维数组传递给 js 问题解决记录

    需求: php从数据库中读取到二维数组.传递到js中 实现步骤: php:json_encode  →   json  →  js:eval 即在php中使用json_encode()将php的二维数 ...

  6. input type file onchange上传文件的过程中,遇到同一个文件二次上传无效的问题。

    不要采用删除当前input[type=file]这个节点,然后再重新创建dom这种方案,这样是不合理的.解释如下:input[type=file]使用的是onchange去做,onchange监听的为 ...

  7. input type file onchange上传文件的过程中,同一个文件二次上传无效的问题。

    不要采用删除当前input[type=file]这个节点,然后再重新创建dom这种方案,这样是不合理的.解释如下:input[type=file]使用的是onchange去做,onchange监听的为 ...

  8. 单元测试以文件流的形势传参调用api进行测试

    [TestMethod] public void Test() { byte[] buffer;//文件转换为二进制流 string path = @"E:\aaa"; Encod ...

  9. wpf app全局变量传参方法(代码片段 )

    清空某行绑定的行数据: int RowIndex = datagrid.SelectedIndex; _Table.Rows[RowIndex]["AVERAGE_PRICE"] ...

随机推荐

  1. Git镜像

    http://npm.taobao.org/mirrors/git-for-windows/v2.34.1.windows.1/ Git 阿里镜像,高速 下载

  2. 静态代理、动态代理与Mybatis的理解

    静态代理.动态代理与Mybatis的理解 这里的代理与设计模式中的代理模式密切相关,代理模式的主要作用是为其他对象提供一种控制对这个对象的访问方法,即在一个对象不适合或者不能直接引用另一个对象时,代理 ...

  3. BUUCTF-被嗅探的流量

    被嗅探的流量 提示告知是文件传输的流量,那进去过滤http流量包即可,找到一个upload目录的,并且是post方式即可,追踪http流即可发现flag

  4. 4种方法教你如何查看java对象所占内存大小

    摘要:本文讲述4种查看java对象所占内存大小的方法 本文分享自华为云社区<查看java对象所占内存大小>,作者:xiewenci. 计算java对象所占内存大小 1.使用jdk8自带AP ...

  5. Failed to Setup IP tables: Unable to enable SKIP DNAT rule: (iptables failed: iptables --wait -t nat -I DOCKER -i br-b1938128a963

    报错信息:Failed to Setup IP tables: Unable to enable SKIP DNAT rule:  (iptables failed: iptables --wait ...

  6. NC201605 Bits

    NC201605 Bits 题目 题目描述 Nancy喜欢做游戏! 汉诺塔是一个神奇的游戏,神奇在哪里呢? 给出 \(3\) 根柱子,最开始时 \(n\) 个盘子按照大小被置于最左的柱子. 如果盘子数 ...

  7. 《ASP.NET Core 6框架揭秘》样章发布[200页/5章]

    作为<ASP.NET Core 3 框架揭秘>的升级版,<ASP.NET Core 6框架揭秘>不仅针对ASP.NET Core 6的新特性进行了修订,并添加了若干原来没有的内 ...

  8. HHL论文及代码理解(Generalizing A Person Retrieval Model Hetero- and Homogeneously ECCV 2018)

    行人再识别Re-ID面临两个特殊的问题: 1)源数据集和目标数据集类别完全不同 2)相机造成的图片差异 因为一般来说传统的域适应问题源域和目标域的类别是相同的,相机之间的不匹配也是造成行人再识别数据集 ...

  9. JavaScript知识梳理

    JS内功修炼 专业术语 类,封装,继承, 专业术语 babel 块级作用域 函数 扩展对象的功能性 解构 set和map js的类 改进的数组功能 Promise与异步编程 代理和反射 用模块封装代码 ...

  10. 迭代器的实现原理和增强for循环

    Iterator遍历集合--工作原理 在调用Iterator的next方法之前,迭代器的索引位于第一个元素之前,不指向任何元素,当第一次调用迭代器的next方法后,迭代器的索引会向后移动一位, 指向第 ...