最近在考虑编码风格的问题,突然想到如何在一个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同一应用下的多模块中共享变量的更多相关文章

  1. python编程os、os.path 模块中关于文件、目录常用的函数使用方法

    os模块中关于文件/目录常用的函数使用方法   函数名 使用方法 getcwd() 返回当前工作目录 chdir(path) 改变工作目录 listdir(path='.') 列举指定目录中的文件名( ...

  2. python在windows下安装paramiko模块和安装pycrypto模块(3步搞定)(转)

    Python中使用SSH需要用到OpenSSH,而OpenSSH依赖于paramiko模块,而paramiko模块又依赖于pycrypto模块,因此要在Python中使用SSH,我们需要先安装pycr ...

  3. python第十九课——random模块中的常用函数

    1.random():返回一个[0,1)的随机浮点数(双精度浮点数) 2.uniform(a,b): 返回[a,b]之间的一个随机浮点数(双精度浮点数) [注意]a和b接受的数据大小随意 例如:3.r ...

  4. Python基础笔记系列十:模块

    本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如C语言),why?因为我写得烂啊,只有我自己看得懂!! 模块 #1.类比于java中的jar包,模块能让你能够有逻辑地组织你的Py ...

  5. 如何在Python脚本中调用外部命令(就像在linux shell或Windows命令提示符下输入一样)

    如何在Python脚本中调用外部命令(就像在linux shell或Windows命令提示符下输入一样) python标准库中的subprocess可以解决这个问题. from subprocess ...

  6. 如何在ubuntu 12.04下搭建Python Django环境

    1. 检查python是否安装:直接在shell里输入python,如果已经安装了python,即可进入python bash,并看到版本号(如Python 2.7.3) ——在ubuntu中pyth ...

  7. 如何在Python中从零开始实现随机森林

    欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 决策树可能会受到高度变异的影响,使得结果对所使用的特定测试数据而言变得脆弱. 根据您的测试数据样本构建多个模型(称为套袋)可以减少这种差异,但是 ...

  8. 如何在Python中使用Linux epoll

    如何在Python中使用Linux epoll 内容 介绍 阻塞套接字编程示例 异步套接字和Linux epoll的好处 epoll的异步套接字编程示例 性能考量 源代码 介绍 从2.6版开始,Pyt ...

  9. 面试官问我:如何在 Python 中解析和修改 XML

    摘要:我们经常需要解析用不同语言编写的数据.Python提供了许多库来解析或拆分用其他语言编写的数据.在此 Python XML 解析器教程中,您将学习如何使用 Python 解析 XML. 本文分享 ...

  10. sqlalchemy mark-deleted 和 python 多继承下的方法解析顺序 MRO

    sqlalchemy mark-deleted 和 python 多继承下的方法解析顺序 MRO 今天在弄一个 sqlalchemy 的数据库基类的时候,遇到了跟多继承相关的一个小问题,因此顺便看了一 ...

随机推荐

  1. FlashDuty Changelog 2023-12-18 | 值班管理、服务日历、自定义操作和邮件集成

    FlashDuty:一站式告警响应平台,前往此地址免费体验! 值班管理 UI 交互优化 [个人日程]从头像下拉菜单调整到值班列表页面,快速查看个人值班日程 [值班列表]支持原地预览最近一周值班情况,包 ...

  2. JVM垃圾回收器与调优参数

    引言 JVM为了更有效率的对堆空间进行垃圾回收,把堆空间进行了分代,分为年轻代.老年代和永久代(在1.8版本以后,永久代已经被彻底移除了,被元空间取而代之). 当一个对象出生时,会首先选择在eden区 ...

  3. MySQL GROUP BY 用法介绍

    MySQL 中 GROUP BY 用法 简介 GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组. 可以把 分组理解成 Excel 中的分组. 把 合计函数理解成 Excel 中 ...

  4. NumPy 差分、最小公倍数、最大公约数、三角函数详解

    NumPy 差分 离散差分意味着相邻元素之间的减法. 例如,对于 [1, 2, 3, 4],离散差分将是 [2-1, 3-2, 4-3] = [1, 1, 1] 要找到离散差分,使用 diff() 函 ...

  5. R语言求取大量遥感影像的平均值、标准差:raster库

      本文介绍基于R语言中的raster包,批量读取多张栅格图像,对多个栅格图像计算平均值.标准差,并将所得新的栅格结果图像保存的方法.   在文章基于R语言的raster包读取遥感影像中,我们介绍了基 ...

  6. electron 安装遇到的各种奇怪问题解决

    在国内,electron经常遇到各种问题,导致无法安装 在安装electron官网的快速入门步骤,到npx electron-forge import的时候,遇到了各种问题 npm install - ...

  7. 13-flex

    01 flex2个重要的概念 02 flex布局模型 03 flex相关属性 04 flex container相关属性 4.1 flex direction 不同的值会改变主轴的方向 4.2 fle ...

  8. .NET中使用RabbitMQ延时队列和死信队列

    RabbitMQ延时队列和死信队列 延时队列和死信队列 延时队列是RabbitMQ中的一种特殊队列,它可以在消息到达队列后延迟一段时间再被消费. 延时队列的实现原理是通过使用消息的过期时间和死信队列来 ...

  9. NXP i.MX 8M Mini开发板规格书(四核ARM Cortex-A53 + 单核ARM Cortex-M4,主频1.6GHz)

    1 评估板简介 创龙科技TLIMX8-EVM是一款基于NXP i.MX 8M Mini的四核ARM Cortex-A53 + 单核ARM Cortex-M4异构多核处理器设计的高性能评估板,由核心板和 ...

  10. Power BI实用技巧:轻松打造专业级甘特图

    Power BI实用技巧:轻松打造专业级甘特图 大家好,今天我们要一起探索Power BI中一个既实用又强大的功能--制作甘特图.甘特图以其直观展示项目时间线和任务进度的特点,在项目管理中扮演着重要角 ...