Python跨文件全局变量的使用技巧

作者:Syw_文 时间:2023-09-17 00:00:31 

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

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 关键字的思路,既然在一个文件里面可以生效的话,那么我们就专门为全局变量定义一个“全局变量管理模块”就好了

新建一个py文件,文件名是:gol.py,具体代码:


# -*- 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:

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

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


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

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


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

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

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

来源:https://www.cnblogs.com/syw20170419/p/10872318.html

标签:Python,跨文件,全局变量
0
投稿

猜你喜欢

  • async/await与promise(nodejs中的异步操作问题)

    2024-04-22 22:43:39
  • php 一维数组的循环遍历实现代码

    2023-06-12 00:49:04
  • 一篇文章带你搞定 springsecurity基于数据库的认证(springsecurity整合mybatis)

    2024-01-20 23:15:34
  • 最新Pygame zero最全集合

    2022-07-18 13:14:16
  • Python 输出时去掉列表元组外面的方括号与圆括号的方法

    2023-06-06 07:10:44
  • Python发送邮件实现基础解析

    2022-01-28 10:33:22
  • 为什么不建议在go项目中使用init()

    2024-05-11 09:17:47
  • perl获取日期与时间的实例代码

    2023-03-30 23:57:01
  • python程序 创建多线程过程详解

    2022-04-02 04:02:21
  • python openCV自制绘画板

    2022-05-17 23:45:51
  • MYSQL使用.frm恢复数据表结构的实现方法

    2024-01-24 21:52:27
  • Python 余弦相似度与皮尔逊相关系数 计算实例

    2022-02-24 01:32:52
  • python绘制多个子图的实例

    2023-01-31 02:24:24
  • 浅谈Python中的私有变量

    2023-07-21 17:59:46
  • 基于pygame实现童年掌机打砖块游戏

    2023-09-18 20:41:28
  • Python如何实现Excel的最合适列宽(openpyxl)

    2023-07-23 04:06:04
  • Python Ruby 等语言弃用自增运算符原因剖析

    2022-10-11 07:42:31
  • 此数据库没有有效所有者,因此无法安装数据库关系图支持对象

    2012-01-29 18:15:11
  • 基于Python实现扑克牌面试题

    2023-11-21 18:05:21
  • 详解Python IO编程

    2021-06-26 08:40:48
  • asp之家 网络编程 m.aspxhome.com