如何在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 的数据库基类的时候,遇到了跟多继承相关的一个小问题,因此顺便看了一 ...
随机推荐
- asp.net core mvc 使用quartz
参照了:https://www.cnblogs.com/dangzhensheng/p/10496278.html 1.新建任务类ReportJob.cs,这个类里就是具体任务了. using Qua ...
- 限速上传文件到腾讯对象存储cos的脚本
官网:https://cloud.tencent.com/document/product/436/12269 安装包,这里用的python2.7 # pip install -U cos-pytho ...
- 基于redis的选主功能设计
需求背景 在JAVA应用开发过程中,越来越多的项目采用了微服务架构,而采用微服务架构最直接作用是可以实现业务层解耦,有利于研发团队可以从业务层面进行划分,比如某几个人的小团队负责某几个微服务,总之,从 ...
- 前端实现预览PDF
下载包 npm install react-pdf 我使用的是react-pdf@5.7.2版本 以下例子使用的是react创建的项目 直接上代码=>cv可用,保证高效 1.新增依赖 yarn ...
- mysql8新版本安装注意事项及解决本地系统账户Strart the server和SQLyog客户端连接报 plugin caching_sha2_password could not be loaded
mysql 安装包一路next安装, 到Apply Configuration,卡住在Start the server,原因是mysql8新版本的登录身份不对,需要进入服务,找到mysql80,然后属 ...
- XAF 属性编辑器(PropertyEditor)- 原理篇
前言 随着 DEV24.1.3 的发布,XAF Blazor 中的属性编辑器(PropertyEditor)也进行了很大的改动,在使用体验上也更接近 WinForm 了,由于进行了大量的封装,理解上没 ...
- 记录vue和js操作——尽管很快实现了功能,可总感觉到不爽
需求产生的原因是:后端有一些数据是从旧平台直接迁移过来的,新平台需要根据迁移过来的数据,自动生产新的数据格式. 操作符有如下几种,分项.支路和数字配合操作符可以自定义组合,例如 [0000000000 ...
- 关于Collection和Map的笔记
此二者在日常编程中,用得太频繁,所以多少有必要记录下,便于需要的时候翻翻. 但鉴于它们的后代太多,逐一牢记有有点难度,所以学习上应该把握以下几点即可: 含义 重要区别 常用的实现类和工具 关注要点:有 ...
- 浮点数格式:FP64, FP32, FP16, BFLOAT16, TF32之间的相互区别
浮点数格式 (参考1,参考2) 浮点数是一种用二进制表示的实数,它由三个部分组成:sign(符号位).exponent(指数位)和fraction(小数位).不同的浮点数格式有不同的位数分配给这三个部 ...
- vscode 使用 python 进行 UG 二次开发 实现代码提示功能
vscode 使用 python 进行 UG 二次开发的 实现代码提示功能 用 VSCODE 进行 UG 二次开发的时候, 想要用代码提示的时候,可以用 pydev 插件, 但是,pydev 只有一个 ...