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