Python 3 实现定义跨模块的全局变量和使用教程


Posted in Python onJuly 07, 2019

尽管某些书籍上总是说避免使用全局变量,但是在实际的需求不断变化中,往往定义一个全局变量是最可靠的方法,但是又必须要避免变量名覆盖。

Python 中 global 关键字可以定义一个变量为全局变量,但是这个仅限于在一个模块(py文件)中调用全局变量:

我们知道Python使用变量的时候是可以直接使用的,x=[] ,y=2,z="123",而不需要先定义(var x; var y=2;var z='222'),这样的话,在函数内部就无法操作外部的变量了,因为它总会认为你是在定义一个新变量并且赋值,不过 global 就可以解决这个问题。

global 的基础用法 :

x = 6
def func():
  global x #定义外部的x
  x = 1
func()
print (x)
#输出1

 这个时候,即使你在另外一个py文件 再次使用 global x 也是无法访问到的,因为在这个py模块中并没有一个叫做x的变量,于是就会报错 未定义。

那么我们怎么办?

借鉴global 关键字的思路,既然在一个文件里面可以生效的话,那么我们就专门为全局变量定义一个“全局变量管理模块”就好了

具体代码:

# -*- coding: utf-8 -*-
def _init():#初始化
  global _global_dict
  _global_dict = {}
def set_value(key,value):
  """ 定义一个全局变量 """
  _global_dict[key] = value
def get_value(key,defValue=None):
""" 获得一个全局变量,不存在则返回默认值 """
  try:
    return _global_dict[key]
  except KeyError:
    return defValue

相信如果你看懂了就应该知道思路了,利用global的单独文件全局性,从而可以定义在一个文件中的全局变量,然后这个单个文件的全局变量可以保存多个文件的共同全局变量

操作的时候,以Key对Value 的方法操作,我相信大家都懂。

# -*- coding:utf-8 -*-
from YourPage import gol
gol._init()#先必须在主模块初始化(只在Main模块需要一次即可)
#定义跨模块全局变量
gol.set_value('CODE','UTF-8')
gol.set_value('PORT',80)
gol.set_value('HOST','127.0.0.1')

然后其他的任何文件只需要导入即可使用:

# -*- coding: utf-8 -*-
from YourPage import gol
#不需要再初始化了
ROOT = gol.get_value('ROOT',80)
CODE = gol.get_value('CODE')

就这么简单~

就这样就可以实现跨文件的全局变量使用;

并且还有一个简单但是强大的全局变量管理器,你可以自己添油加醋,实现一些比如全局变量禁止直接修改,禁止修改某些只可读的全局变量等等。

总结

以上所述是小编给大家介绍的Python 3 实现定义跨模块的全局变量和使用教程,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Python 相关文章推荐
pydev使用wxpython找不到路径的解决方法
Feb 10 Python
50行代码实现贪吃蛇(具体思路及代码)
Apr 27 Python
python多线程扫描端口示例
Jan 16 Python
python操作mongodb根据_id查询数据的实现方法
May 20 Python
浅谈python新手中常见的疑惑及解答
Jun 14 Python
python构建基础的爬虫教学
Dec 23 Python
Python3.5运算符操作实例详解
Apr 25 Python
Python3简单实现串口通信的方法
Jun 12 Python
python面向对象之类属性和类方法案例分析
Dec 30 Python
如何使用python代码操作git代码
Feb 29 Python
python print 格式化输出,动态指定长度的实现
Apr 12 Python
python + selenium 刷B站播放量的实例代码
Jun 12 Python
Python正则表达式匹配日期与时间的方法
Jul 07 #Python
python pickle存储、读取大数据量列表、字典数据的方法
Jul 07 #Python
python保存字典和读取字典的实例代码
Jul 07 #Python
python 实现创建文件夹和创建日志文件的方法
Jul 07 #Python
python 画二维、三维点之间的线段实现方法
Jul 07 #Python
Python调用百度根据经纬度查询地址的示例代码
Jul 07 #Python
选择Python写网络爬虫的优势和理由
Jul 07 #Python
You might like
php curl post 时出现的问题解决
2014/01/30 PHP
php获取网卡的MAC地址支持WIN/LINUX系统
2014/04/30 PHP
PHP、Nginx、Apache中禁止网页被iframe引用的方法
2020/10/01 PHP
win7 64位系统 配置php最新版开发环境(php+Apache+mysql)
2014/08/15 PHP
PHP5.3新特性小结
2016/02/14 PHP
PHP实现数组array转换成xml的方法
2016/07/19 PHP
利用ajax和PHP实现简单的流程管理
2017/03/23 PHP
tp5框架前台无限极导航菜单类实现方法分析
2020/03/29 PHP
js版本A*寻路算法
2006/12/22 Javascript
jquery提升性能最佳实践小结
2010/12/06 Javascript
js解析与序列化json数据(一)json.stringify()的基本用法
2013/02/01 Javascript
javascript与jquery中的this关键字用法实例分析
2015/12/24 Javascript
js实现添加可信站点、修改activex安全设置,禁用弹出窗口阻止程序
2016/08/17 Javascript
JavaScript编码风格指南(中文版)
2016/08/26 Javascript
JS常用加密编码与算法实例总结
2016/12/22 Javascript
js模拟微博发布消息
2017/02/23 Javascript
jQuery dateRangePicker插件使用方法详解
2017/07/28 jQuery
解决vue-router进行build无法正常显示路由页面的问题
2018/03/06 Javascript
jQuery md5加密插件jQuery.md5.js用法示例
2018/08/24 jQuery
微信小程序实现星级评价
2019/11/20 Javascript
vue打包npm run build时候界面报错的解决
2020/08/13 Javascript
[01:13:17]Secret vs NB 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
记录Django开发心得
2014/07/16 Python
python中threading超线程用法实例分析
2015/05/16 Python
PyTorch CNN实战之MNIST手写数字识别示例
2018/05/29 Python
详解如何为eclipse安装合适版本的python插件pydev
2018/11/04 Python
python游戏地图最短路径求解
2019/01/16 Python
Pytorch 实现focal_loss 多类别和二分类示例
2020/01/14 Python
基于canvas使用贝塞尔曲线平滑拟合折线段的方法
2018/01/10 HTML / CSS
Clarins娇韵诗英国官网:来自法国的天然护肤品牌
2017/04/18 全球购物
美国大码时尚女装购物网站:ELOQUII
2017/12/28 全球购物
外语专业毕业生自我评价分享
2013/10/05 职场文书
行政文员岗位职责
2015/02/04 职场文书
工程项目合作意向书
2015/05/08 职场文书
遗愿清单观后感
2015/06/09 职场文书
思想品德课教学反思
2016/02/24 职场文书