python跨文件之全局变量
2024-09-08 18:12:54
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')
另外,如果是多线程,可能会出现一个线程写入这个变量,另一个线程又在读取,从可靠性的角度考虑,多线程时读写最好加个锁同步一下
最新文章
- Android的事件处理机制(一)------基于回调机制的事件处理
- VxWorks 6.9 内核编程指导之读书笔记 -- 多任务
- php框架Symfony资料
- Task任务
- 新API:AttachThreadInput
- 主线程中有多个handler的情况
- Object转换为JSON格式字符串
- 关于已经安装python为何还要安装python-dev
- 10,随机等概率的输出m个不重复的数
- WCF技术剖析之十六:数据契约的等效性和版本控制
- w3wp与w3svc
- hdu 5592 BestCoder Round #65(树状数组)
- linux中的网络通信指令
- Xapth 添加注释头
- MySQL 存储过程返回多个值
- CSS3 利用border-radius实现椭圆角
- win2003远程桌面怎么切换到多用户?
- Javascript 字典应用实例
- Vue.js的复用组件开发流程
- Hbase记录-Hbase调优参数
热门文章
- Beginning IOS 7 Development Exploring the IOS SDK - Navigation Controllers and Table Views
- One-Shot Transfer Learning of Physics-Informed Neural Networks
- ubuntu18 build opencv4 from source
- HTML5代码大全
- 问题记录之---nginx temp文件夹
- SpringCloud-Hoxton.SR1-config整合
- maven(web)项目,不自动出现overlays的上级web项目
- Java基础之类型转换
- go: go.mod file not found in current directory or any parent directory; see 'go help mod 解决
- mqtt的使用