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

这篇具有很好参考价值的文章主要介绍了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中的全局变量的值了。文章来源地址https://www.toymoban.com/news/detail-788033.html

到了这里,关于python实现对导入包中的全局变量进行修改的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Web 攻防之业务安全:验证码绕过测试.(修改数据包中 res_code 的值 实现绕过.)

    业务安全是指保护业务系统免受安全威胁的措施或手段。 广义 的业务安全应包括业务运行的 软硬件平台 (操作系统、数据库,中间件等)、 业务系统自身 (软件或设备)、 业务所提供的服务安全 ; 狭义 的业务安全指 业务系统自有的软件与服务的安全 。 验证码绕过测试

    2023年04月14日
    浏览(57)
  • Jenkins pipeline中的全局变量

    1.再environment使用key=value形式定义变量 2.从参数中获取变量值

    2024年02月07日
    浏览(34)
  • ThreadLocal:线程中的全局变量

    最近接了一个新需求,业务场景上需要在原有基础上新增2个字段,接口新增参数意味着很多类和方法的逻辑都需要改变,需要先判断是否属于该业务场景,再做对应的逻辑。原本的打算是在入口处新增变量,在操作数据的时候进行逻辑判断将变量进行存储或查询。 如果全链

    2024年02月10日
    浏览(42)
  • Java中的全局变量和局部变量(看这篇就够了)

    在Java中,全局变量和局部变量是两种不同作用域的变量。 全局变量(成员变量) : 在类中定义的变量称为成员变量,也叫全局变量。它们的作用域是整个类,在类的任何地方都可以被访问。 如果没有显式地初始化,它们会有默认值。 全局变量可以是基本数据类型(如int、

    2024年02月04日
    浏览(45)
  • 【CSS扩展】VUE如何使用或修改element plus中自带的CSS全局变量来定义样式

    目录 一、CSS声明全局变量 二、使用el plus 和 el ui的自带样式 1、element plus—— var.scss位置 2、element ui—— var.scss位置 三、修改el plus 和 el ui中的自定义样式变量(方法一致) 本萌新最近在写网页时使用到了element plus中自带的CSS全局样式定义,本文将从CSS声明全局变量的方法出

    2024年01月22日
    浏览(62)
  • Nodejs安装及环境变量配置(修改全局安装依赖工具包和缓存文件夹及npm镜像源)

    本机环境:win11家庭中文版 一、官网下载  二、安装              三、查看nodejs及npm版本号 1、查看node版本号 2、查看NPM版本号(安装nodejs时已自动安装npm)  四、配置npm全局下载工具包和缓存目录 1、查看安装目录  在本目录下创建node_global和node_cache目录,以后通过npm安装

    2024年02月14日
    浏览(51)
  • Python的全局变量、局部变量、类变量、实例变量介绍

    Python 的变量分类 全局变量:模块内、所有函数外、所有class外的变量; 局部变量:函数内的变量,class的方法内且不使用self.修饰的变量; 类变量:class内且不在class的方法内; 实例变量:class的方法内且使用self.修饰的变量。 对于面向过程程序设计涉及: 全局变量:模块中

    2024年02月03日
    浏览(54)
  • Python系列(4)—— 全局变量

    在Python编程中,全局变量是一个重要的概念。全局变量是在函数之外定义的变量,可以在程序的任何地方访问和修改。本文将深入探讨Python中的全局变量,包括其工作原理、使用方法以及注意事项。 全局变量在程序中只有一个实例,可以在程序的任何地方访问和修改。当在函

    2024年01月22日
    浏览(85)
  • python 设置全局变量

    这里我新建了一个utils文件夹,然后在里面新建了g.py文件 通过global来定义一个全局变量,并将该变量初始化为一个空字典.就可以达到设置、获取任意key:value的功能 代码: 导入g模块,执行初始化 哪里需要就在哪里初始化即可.因为我这是在一个django项目里加的,所以放在了apps.py文件

    2024年02月11日
    浏览(52)
  • 【python】python跨文件使用全局变量

    有多个py文件同时使用一个全局变量时,那应该如何使跨文件,用这个全局变量呢? (关注“测试开发自动化” 弓中皓,查看历史文章,更详细的解析说明) file1.py代码如下: file2.py代码如下: 很多同学认为应该打印92,即:1+100-10 = 91。但是实际只打印了-9,也就说明,fi

    2024年02月03日
    浏览(71)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包