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

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

最新文章

  1. Android的事件处理机制(一)------基于回调机制的事件处理
  2. VxWorks 6.9 内核编程指导之读书笔记 -- 多任务
  3. php框架Symfony资料
  4. Task任务
  5. 新API:AttachThreadInput
  6. 主线程中有多个handler的情况
  7. Object转换为JSON格式字符串
  8. 关于已经安装python为何还要安装python-dev
  9. 10,随机等概率的输出m个不重复的数
  10. WCF技术剖析之十六:数据契约的等效性和版本控制
  11. w3wp与w3svc
  12. hdu 5592 BestCoder Round #65(树状数组)
  13. linux中的网络通信指令
  14. Xapth 添加注释头
  15. MySQL 存储过程返回多个值
  16. CSS3 利用border-radius实现椭圆角
  17. win2003远程桌面怎么切换到多用户?
  18. Javascript 字典应用实例
  19. Vue.js的复用组件开发流程
  20. Hbase记录-Hbase调优参数

热门文章

  1. Beginning IOS 7 Development Exploring the IOS SDK - Navigation Controllers and Table Views
  2. One-Shot Transfer Learning of Physics-Informed Neural Networks
  3. ubuntu18 build opencv4 from source
  4. HTML5代码大全
  5. 问题记录之---nginx temp文件夹
  6. SpringCloud-Hoxton.SR1-config整合
  7. maven(web)项目,不自动出现overlays的上级web项目
  8. Java基础之类型转换
  9. go: go.mod file not found in current directory or any parent directory; see 'go help mod 解决
  10. mqtt的使用