python实现对导入包中的全局变量进行修改

问题

在写程序中遇到这样一个问题,有一个base.py 文件,文件内容如下:

#base.py文件
global x
x='base'

def print_x():
    print(x)

在另一个主程序test.py中,导入这个文件,并使用其中的print_x函数,但是我想修改base.py 中全局变量x的值,于是在test.py中的代码写成:

#test.py文件
from base import *

global x
x='test'
print_x()
#输出仍然为'base'

运行test.py之后,发现输出仍然是'base',这是因为在 Python 中,全局变量是相对于模块(文件)的,而不是相对于代码中的位置。当在 test.py 中使用 global x 来定义 x 并赋值为 'test' 时,这个 x 是属于 test.py 模块的全局变量,而不是 base.py 中的全局变量 x

导入 base.py 文件中的内容后,在 test.py 中对 x 进行赋值操作,实际上是创建了一个新的 test.py 模块级别的 x,而不是修改 base.py 中的 x。这就是为什么 print_x() 函数仍然输出 'base'

解决方案1

网上给出的解决方法是:

#test.py文件
import base

base.x = 'test'  # 修改 base.py 中的全局变量 x 的值
base.print_x()   # 输出 'test'

解决方案2

但我不想每次用base里的函数的时候都要加上base.,因为实际情况中我的base.py中有很多函数需要在test.py中使用,于是这里给出另一种解决办法,在base.py中加入一个修改自身全局变量的函数,而后在test.py中调用它,修改后的两个文件如下:

#base.py文件
global x
x='base'

def print_x():
    print(x)

def set_global_dct(v_name,v_value):#用于修改全局变量的值
    glb_dct = globals()
    glb_dct[v_name] = v_value
#test.py文件
from base import *

set_global_dct('x','test')
print_x()

这里使用globals()获得globals()所在文件的全局变量的字典,并进行修改。在test.py中调用base.py中的修改函数,传入要修改的变量名和新的值,这样在test.py中修改的就是base.py中的全局变量的值了。

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艽野尘梦better

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值