python全局变量

最近第一次写比较复杂的python,把程序功能划分了几个大块,写的不同的py文件。但依旧不可以避免需要在不同文件之间传递全局变量。

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()

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

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')

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值