Python中的global关键字,你了解吗? - 知乎 (zhihu.com)  global 关键字

 

python跟C不一样,c是在一个文件定义后在另一个文件声明下是extern变量就好。python则是通过global声明,但作用域依旧是单个文件。

有一种方式是在A定义,在B import。这种方式,如果仅存在B import A ,那没问题。但是如果A又存在import B则会报错,原因是出现循环调用。解决办法也有几种,这里不展开。这种方式,有一个问题,就是无法实时传递变量,B import后,A中发生了变化,B是不知道的。

于是乎,不如单独拿一个py文件来单独存放这些全局变量,其他文件都可以单向import。百度了下,别人也是这么做的,这里贴一下代码:

单独搞一个global_var.py如下

复制代码
def _init():  # 初始化
    global _global_dict
    _global_dict = {}

def set_value(key, value):
    #定义一个全局变量
    _global_dict[key] = value

def get_value(key):
    #获得一个全局变量,不存在则提示读取对应变量失败
    try:
        return _global_dict[key]
    except:
        print('读取'+key+'失败\r\n')
复制代码

其他文件需要用到的,则import global_var.py。然后在主文件初始化一下,global_var._init()

接着便可以随便使用了,比如先定义(定义字典的时候顺便写入初始值):

import global_var.py
global_var._init()


global_var.set_value('file_dir', '') global_var.set_value('str_buf','') global_var.set_value('stop_flag',stop_flag) global_var.set_value('input_step',input_step) global_var.set_value('input_speed',input_speed)

使用的时候,直接get下字典对应键值

input_step = global_var.get_value('input_step')
input_speed = global_var.get_value('input_speed')

 

 另外,如果是多线程,可能会出现一个线程写入这个变量,另一个线程又在读取,从可靠性的角度考虑,多线程时读写最好加个锁同步一下

 posted on   2165843  阅读(2012)  评论(7)    收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示