如何在python同一应用下的多模块中共享变量
最近在考虑编码风格的问题,突然想到如何在一个python应用下的多个模块中共享一个变量。最早接触python还是在python2.5版本左右,那个时候由于python的import规则设定的问题导致本文所提问题难以解决,这也是不知不觉中都到了python3.10的版本了,由于python3中对python的import规则进行了修改,从而是python多模块下共享变量变得容易了。 本文问题的解决主要依赖于python3采用绝对路径的命名空间。
给出示例:
代码文件层级关系的结构:

说明:
main.py 是我们要运行的主文件,sub_module模块是与main.py同级的,二者在同一目录下。
test 模块 和 x.py y.py __init__.py 这四个文件在同一目录下,为同级关系。其中,__init__.py 文件为空文件。
给出 x.py , y.py 的文件内容:
x.py
print("enter x file")
from . import test
print(
test.x,
test.x.x,
test.x.y,
)
test.x.x=15
test.x.y=15
print(
test.x,
test.x.x,
test.x.y,
)
print("exit x file")
y.py
print("enter y file")
from . import test
from .test import *
print(
test.x,
test.x.x,
test.x.y,
)
test.x.x = 20
test.x.y = 20
print(
test.x,
test.x.x,
test.x.y,
)
print("exit y file")
test 模块下的 __init__.py 文件内容:
print("enter test.init file")
class X:
def __init__(self, x: int, y: int):
self.x=x
self.y=y
x = X(11, 11)
print(x, x.x, x.y)
print("exit test.init file")
====================================
运行 main.py 文件:
运行结果:
enter test.init file
<sub_module.test.X object at 0x7ff5eebc5050> 11 11
exit test.init file
main file: <sub_module.test.X object at 0x7ff5eebc5050> 11 11
enter x file
<sub_module.test.X object at 0x7ff5eebc5050> 11 11
<sub_module.test.X object at 0x7ff5eebc5050> 15 15
exit x file
enter y file
<sub_module.test.X object at 0x7ff5eebc5050> 15 15
<sub_module.test.X object at 0x7ff5eebc5050> 20 20
exit y file
main file: <sub_module.test.X object at 0x7ff5eebc5050> 20 20

============================================
从上面的运行结果可以看出python3版本的命名空间都是绝对路径的,也就是说一个模块中定义的变量在另一个模块中只要是可以import引用的,那么该模块中的变量就是可以被共享的。
============================================
如何在python同一应用下的多模块中共享变量的更多相关文章
- python编程os、os.path 模块中关于文件、目录常用的函数使用方法
os模块中关于文件/目录常用的函数使用方法 函数名 使用方法 getcwd() 返回当前工作目录 chdir(path) 改变工作目录 listdir(path='.') 列举指定目录中的文件名( ...
- python在windows下安装paramiko模块和安装pycrypto模块(3步搞定)(转)
Python中使用SSH需要用到OpenSSH,而OpenSSH依赖于paramiko模块,而paramiko模块又依赖于pycrypto模块,因此要在Python中使用SSH,我们需要先安装pycr ...
- python第十九课——random模块中的常用函数
1.random():返回一个[0,1)的随机浮点数(双精度浮点数) 2.uniform(a,b): 返回[a,b]之间的一个随机浮点数(双精度浮点数) [注意]a和b接受的数据大小随意 例如:3.r ...
- Python基础笔记系列十:模块
本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如C语言),why?因为我写得烂啊,只有我自己看得懂!! 模块 #1.类比于java中的jar包,模块能让你能够有逻辑地组织你的Py ...
- 如何在Python脚本中调用外部命令(就像在linux shell或Windows命令提示符下输入一样)
如何在Python脚本中调用外部命令(就像在linux shell或Windows命令提示符下输入一样) python标准库中的subprocess可以解决这个问题. from subprocess ...
- 如何在ubuntu 12.04下搭建Python Django环境
1. 检查python是否安装:直接在shell里输入python,如果已经安装了python,即可进入python bash,并看到版本号(如Python 2.7.3) ——在ubuntu中pyth ...
- 如何在Python中从零开始实现随机森林
欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 决策树可能会受到高度变异的影响,使得结果对所使用的特定测试数据而言变得脆弱. 根据您的测试数据样本构建多个模型(称为套袋)可以减少这种差异,但是 ...
- 如何在Python中使用Linux epoll
如何在Python中使用Linux epoll 内容 介绍 阻塞套接字编程示例 异步套接字和Linux epoll的好处 epoll的异步套接字编程示例 性能考量 源代码 介绍 从2.6版开始,Pyt ...
- 面试官问我:如何在 Python 中解析和修改 XML
摘要:我们经常需要解析用不同语言编写的数据.Python提供了许多库来解析或拆分用其他语言编写的数据.在此 Python XML 解析器教程中,您将学习如何使用 Python 解析 XML. 本文分享 ...
- sqlalchemy mark-deleted 和 python 多继承下的方法解析顺序 MRO
sqlalchemy mark-deleted 和 python 多继承下的方法解析顺序 MRO 今天在弄一个 sqlalchemy 的数据库基类的时候,遇到了跟多继承相关的一个小问题,因此顺便看了一 ...
随机推荐
- C#.NET Winform承载WCF RESTful API (App.config 方式)
1.新建一个名为"WindowsForms承载WCF"的WINFORM程序. 2.在解决方案里添加一个"WCF 服务库"的项目,名为"WcfYeah& ...
- Prometheus + Grafana (1) 监控
简介 Micrometer/Prometheus/Grafana体系是当前最成熟的低成本Java监控解决方案,而且通过其他的Prometheus exporter,还可以进行诸如我们可能需要的Wind ...
- PIC18 bootloader之RS485 bootloader
了解更多关于bootloader 的C语言实现,请加我Q扣: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制b ...
- Bean Searcher v4.3.0 重大更新!
往期阅读: 我这样写代码,比直接使用 MyBatis 效率提高了 100 倍 最近火起的 Bean Searcher 与 MyBatis Plus 倒底有啥区别? Bean Searcher v3.8 ...
- fs.1.10 ON rockeylinux8 dockerfile模式
概述 freeswitch是一款简单好用的VOIP开源软交换平台. rockeylinux8 docker上编译安装fs.1.10的流程记录,本文使用dockerfile模式. 环境 docker e ...
- FreeRTOS简单内核实现3 任务管理
0.思考与回答 0.1.思考一 对于 Cotex-M4 内核的 MCU 在发生异常/中断时,哪些寄存器会自动入栈,哪些需要手动入栈? 会自动入栈的寄存器如下 R0 - R3:通用寄存器 R12:通用寄 ...
- Windows CSC提权漏洞复现(CVE-2024-26229)
漏洞信息 Windows CSC服务特权提升漏洞. 当程序向缓冲区写入的数据超出其处理能力时,就会发生基于堆的缓冲区溢出,从而导致多余的数据溢出到相邻的内存区域.这种溢出会损坏内存,并可能使攻击者能够 ...
- 如何应用 matrix3d 映射变幻
如何应用 matrix3d 映射变幻 先上 demo 记得是在 2015 看到过的一个 html5 演示效果, 很惊艳 当时没明白如何实现,现在我会了,做一个类似的: 又弄了一个拖动的 demo 我数 ...
- centos8使用nmcli实现bond
#添加bonding接口 nmcli con add type bond con-name bond0 ifname bond0 mode active-backup ipv4.method manu ...
- RuoYi-Cloud从配置到运行
前期准备工作 若依微服务版(RuoYi-Cloud)代码下载:https://gitee.com/y_project/RuoYi-Cloud 注册中心(nacos)下载:https://www.ali ...