zoukankan      html  css  js  c++  java
  • python 共享全局变量

    0X01 场景

    最近几次遇到下面场景:
    函数调用关系   A->B->C->D->E->F->G
    G处需要一个X数据,但这个X数据只有A处出现过,中间过程由于某种原因难以修改  (比如 中间某一阶段程序外其他人员写的几百个插件,在模板设立之初就没有考虑传递该数据,改模板意味着要改几百个插件)

    0X02 将数据传入类本身里

    这里并不是指类的实例,而是在A截断就将数据传入G调用的类里。
    每个类相当于一个模板,在进程开启的时候,只存一份在内存中。
    将数据直接怼到类里作为一个属性,就可以实现在A处跳着直接传数据给G。

    0X03 更简单通用的方法

    0X02中使用的类其实是使用了其可变对象存的是指针的特点。
    如此可以另起一个文件,用于存储一个可变对象,可以是:
    队列
    字典

    类对象

    之后在文件A处引用并改动 (传入数据),在G处引用拿出数据就好了。

    0X04 实例

    __init__.py
    my_class.py
    my_test_1.py
    my_test_2.py
    
    # my_class.py
    MyConf = "NULL"
    MyAAA = []
    
    
    class MyCl:
        my_param = ""
    
        def __init__(self):
            pass
    
    
    # my_test_1.py
    """ 如果在程序开头设置一个类的变量,在其他地方能调用么 """
    from sqlmap_qps_test.my_test_2 import func_two
    from sqlmap_qps_test.my_class import MyCl, MyAAA
    from sqlmap_qps_test.my_class import MyConf
    import sqlmap_qps_test
    
    MyCl.my_param = "1"
    MyCl()
    sqlmap_qps_test.MyConf = "2"
    MyAAA.append("3")
    func_two()
    
    
    # my_test_2.py
    def func_two():
        from sqlmap_qps_test.my_class import MyCl
        mm = MyCl()
        print(mm.my_param)
        from sqlmap_qps_test.my_class import MyConf
        print(MyConf)
        import sqlmap_qps_test
        print(sqlmap_qps_test.MyConf)
        from sqlmap_qps_test.my_class import MyAAA
        print(MyAAA)
    
    

    运行my_test_1.py结果

    1
    NULL
    2
    ['3']
    

    第一行 mm.my_param  为 1,被修改
    在test_1中,1被传入作为类的属性,所以在test_2中,属性调用拿到这个1

    第二行 MyConf 为NULL,无改动
    在test_1中,修改了 sqlmap_qps_test这个文件(指针存在)里的MyConf;在test_2中,引入了MyConf,直接传入一个字符串,另外一个地址,而不是sqlmap_qps_test文件指向的属性。
    所以之间修改互不影响

    第三行 sqlmap_qps_test.MyConf.MyConf,被修改
    在test_1中,修改了 sqlmap_qps_test这个文件(指针存在)里的MyConf;test_2调用拿到了文件地址指向的MyConf

    第四行 队列 MyAAA ,被修改
    在test_1中,修改了队列实例;在test_2中,拿到了队列实例的地址,也拿到了修改后的内容

  • 相关阅读:
    【转】HEIF图片存储格式探秘
    【转】Maven项目中将配置文件打包到jar包中
    C++ 单词接龙
    vector vector int 初始化
    哈夫曼树的特点
    哈夫曼树的构造
    单链表的逆转(测试数据)
    单链表的逆转
    二叉搜索树的插入
    二叉搜索数的应用
  • 原文地址:https://www.cnblogs.com/huim/p/13072917.html
Copyright © 2011-2022 走看看