先说明,此篇只是整理前人的方法

网上一搜索,排名前几的大都是一个方法,大同小异,连出现的问题都一样,让人联想.....

但直接使用时要么有问题,要么写的不适合新手学习

我总结了一下:

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)

写出来是为了加深自己理解,也避免大家重复我踩过的坑

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐