先说明,此篇只是整理前人的方法
网上一搜索,排名前几的大都是一个方法,大同小异,连出现的问题都一样,让人联想.....
但直接使用时要么有问题,要么写的不适合新手学习
我总结了一下:
1.建立一个名字为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):
# 获得一个全局变量,不存在则提示读取对应变量失败
try:
return _global_dict[key]
except:
print('读取' + key + '失败\r\n')
2.在每个使用跨文件全局变量的py文件里,都导入上面的 gol 模块
import gol
3.在自己主程序模块里,先 初始化gol模块一次 :gol._init()
注意:只需初始化一次,再次初始化会将已配置的全局变量清空
# 初始化gol模块,只需要在主程序模块初始一次
gol._init()
之后就简单了,不同的py文件中:
# 新建或者重置跨文件全局变量:gol.set_value(变量名, 变量值)
gol.set_value('name', '帅哥')
# 获得某个跨文件全局变量的值: gol.get_value(变量名)
name = gol.get_value('name')
下面是例子:
在已有gol.py文件的基础上
新建 test1.py,代码:
import gol
import test2
# 初始化gol模块,只在主程序模块使用一次
# 不可重复初始化使用,会清空已配置的全局变量
gol._init()
# 新建或者重置跨文件全局变量:gol.set_value(变量名, 变量值)
gol.set_value('name', '帅哥')
name = gol.get_value('name')
# 可以看到现在打印的是:’帅哥‘
print(f'1.在 test1 中打印新创建的变量 name:{name}')
test2.aaa()
# 获得某个跨文件全局变量的值: gol.get_value(变量名)
name = gol.get_value('name')
# 经过test2.aaa的修改,变量'name'已经变为'美女'
print(f'3.在 test1 中打印在 test2.aaa 修改的全局变量 name:{name}')
# 获得了在 test2.aaa 里的变量
age=gol.get_value('age')
print(f'4.在 test1 中打印在 test2.aaa 创建的全局变量 age:{age}')
新建test2.py,代码:
import gol
def aaa():
# 获得变量'name'的值
name = gol.get_value('name')
# 此时打印的是:帅哥
print(f'2.在 test2 中打印在 test1 创建的全局变量 name:{name}')
# 重新设置变量'name'的值为'美女'
gol.set_value('name', '美女')
# 创建新的变量 'age'
gol.set_value('age', 18)
执行test1,输出:
1.在 test1 中打印新创建的变量 name:帅哥
2.在 test2 中打印在 test1 创建的全局变量 name:帅哥
3.在 test1 中打印在 test2.aaa 修改的全局变量 name:美女
4.在 test1 中打印在 test2.aaa 创建的全局变量 age:18
第一次在CSDN发文章,本人又只是个python初学者,代码难免不规范,意思传达到即可
我用google搜索出来的排名前几的文章,大都有个共性问题,就是在get_value()中传入两个变量,导致出错,例如:
ROOT = gol.get_value('ROOT',80)
写出来是为了加深自己理解,也避免大家重复我踩过的坑