python基础12 模块/库的引用
在软件的设计中,经常提及到解耦的概念,即模块和模块之间的功能尽可能独立,减少不必要的关联。所以在实际项目中,我们经常会将一个工程拆解成很多不同的功能模块,以实现更优的设计并满足团队开发的要求。
有了模块的概念,就涉及到模块之间的引用关系。
一、基本引用
在python中,创建模块就像编写任何其他Python文件一样。模块可以包含变量、函数、类等。
如同级目录下有其他的.py(python文件),则可以使用import方法进行模块的引用。
创建一个sub_test.py文件:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-CONST_TEST_VALUE = "THIS IS CONST VALUE FROM SUB MODULE."def func_test():print("Call sub func.")class class_test:def __init__(self, name, age):self.name = nameself.age = agedef show(self):print("SubClass name:", self.name)print("SubClass age:", self.age)
创建一个main.py文件:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-import sub_test as subif __name__ == '__main__':print(sub.CONST_TEST_VALUE)sub.func_test()#here, we create a sub class instance.subinstance = sub.class_test("sub class",34)subinstance.show()
在main.py中,我们实现了对文件sub_test.py的模块引用,并用sub作为别名。在执行方法中,依次调用了变量、函数,并实现了子模块中类的实例化。
二、高阶使用
为了在项目中达到最佳使用实践,我们还可能使用子目录的方式来创建python模块。此方式需要引用一个__init__.py文件,来表示此目录中的文件可做为python类引用。
The __init__.py file is a special Python file that is used to indicate thatthe directory it is in should be treated as a Python package.
This file is executed when a package is imported and can contain initialization
code for the package, such as importing submodules, defining variables,
or executing other code
基于官方描述,__init__.py是一个特殊的python文件,用来表示这个目录应该作为一个python包/模块来对待。这个特殊的文件将在被引用的时候执行,而且可以包含模块的初始化代码。
2.1 简单使用
在main.py同级目录内,创建一个sub_folder文件夹,并创建空的__init__.py以及一个subFoler_test.py,此时目录结构如下:
main.py
sub_folder
----__init__.py
----subFolder_test.py
subFoler_test.py源码:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-def func_test():print("Call subFolder func.")
修改main.py如下:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-#sub_test.py
import sub_test as sub
#subFolder_test.py in the directory sub_folder
import sub_folder.subFolder_test as subFolderif __name__ == '__main__':print(sub.CONST_TEST_VALUE)sub.func_test()#here, we create a sub class instance.subinstance = sub.class_test("sub class",34)subinstance.show()subFolder.func_test()
执行输出如下:
THIS IS CONST VALUE FROM SUB MODULE.
Call sub func.
SubClass name: sub class
SubClass age: 34
Call subFolder func.
2.2 使用__init__.py进行初始化
假设我们的包结构进一步复杂化,其结构如下:
main.py
sub_folder
----__init__.py
----subFolder_test.py
----s1.py
----s2.py
----s3.py
----s4.py
此时如果按照2.1中的方式进行引用,则引用代码需要修改如下:
import sub_folder.subFolder_test as subFolder
import sub_folder.s1
import sub_folder.s2
import sub_folder.s3
import sub_folder.s4
上述方式很显然不符合设计规范。
我们需要通过修改__init__.py文件的内容,来达到简化引用的目的。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-import sub_folder.subFolder_test
import sub_folder.s1
import sub_folder.s2
import sub_folder.s3
import sub_folder.s4subFolder = sub_folder.subFolder_test
s1 = sub_folder.s1
s2 = sub_folder.s2
s3 = sub_folder.s3
s4 = sub_folder.s4
main.py同步修改,此时引用代码将大幅精简:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-#sub_test.py
import sub_test as sub
#subFolder_test.py in the directory sub_folder
import sub_folder as sfif __name__ == '__main__':print(sub.CONST_TEST_VALUE)sub.func_test()#here, we create a sub class instance.subinstance = sub.class_test("sub class",34)subinstance.show()sf.subFolder.func_test()sf.s1.func_test()sf.s2.func_test()sf.s3.func_test()sf.s4.func_test()
执行输出如下:
THIS IS CONST VALUE FROM SUB MODULE.
Call sub func.
SubClass name: sub class
SubClass age: 34
Call subFolder func.
Call subFolder s1 func.
Call subFolder s2 func.
Call subFolder s3 func.
Call subFolder s4 func.
三、总结
在此章节,我们总结了基于同级目录下python模块的简单引用,以及基于__init__.py的高阶使用。通过这两种方式的组合,我们将可以实现项目中的各种模块的引用。
相关文章:
python基础12 模块/库的引用
在软件的设计中,经常提及到解耦的概念,即模块和模块之间的功能尽可能独立,减少不必要的关联。所以在实际项目中,我们经常会将一个工程拆解成很多不同的功能模块,以实现更优的设计并满足团队开发的要求。 有了模块的概…...
TDengine JAVA 语言连接器
简介 本节简介 TDengine 最重要且使用最多的连接器, 本节内容是以教科书式方式列出对外提供的接口及功能及使用过程中要注意的技术细节,大家可以收藏起来做为今后开发 TDengine 的参考资料。 taos-jdbcdriver 是 TDengine 的官方 Java 语言连接器,Java…...
【NLP 55、实践 ⑬ LoRA完成NER任务】
目录 一、数据文件 二、模型配置文件 config.py 三、数据加载文件 loader.py 1.导入文件和类的定义 2.初始化 3.数据加载方法 代码运行流程 4.文本编码 / 解码方法 ① encode_sentence(): ② decode(): 代码运行流程 ③ padding(): 代码…...
【蓝桥杯】Python大学A组第十五届省赛
1.填空题 1.1.拼正方形 问题描述 小蓝正在玩拼图游戏,他有个的方块和个的方块,他需要从中挑出一些来拼出一个正方形。 比如用个和个的方块可以拼出一个的正方形;用个的方块可以拼出一个的正方形。 请问小蓝能拼成的最大的正方形的边长为多少。 import math # 2*2的个数 a =…...
小球反弹(蓝桥杯C语言)
有一长方形,长为 343720343720 单位长度,宽为 233333233333 单位长度。在其内部左上角顶点有一小球 (无视其体积),其初速度如图所示且保持运动速率不变,分解到长宽两个方向上的速率之比为 dx:dy15:17dx:dy15:17。小球碰到长方形的…...
Redis底层数据结构?编码与底层数据结构的映射?
Redis底层数据结构 一、简单动态字符串(SDS) 结构: struct sdshdr {int len; // 已使用字节长度 int free; // 未使用字节长度 char buf[]; // 字节数组(兼容C字符串) };特点: 二进制安全&#…...
linux环境下的硬盘分区格式化工具介绍 fdisk,gdisk,parted,cfdisk,cgdisk,sfdisk,gparted 笔记250407
linux环境下的硬盘分区格式化工具介绍 fdisk,gdisk,parted,cfdisk,cgdisk,sfdisk,gparted 笔记250407 以下是 Linux 系统中常用的 硬盘分区与格式化工具,涵盖命令行和图形界面工具,按功能分类整理: 一、分区管理工具 1. 命令行工具 工具功能…...
HarmonyOS-ArkUI Ability进阶系列-UIAbility与各类Context
UIAbility及相关类关系 一个模块编译的时候会出一个HAP包, 每一个HAP包在运行时都对应一个AbilityStage。 AbilityStage持有一个AbilityStageContext一个APP, 有时候会有很多个HAP包, 至少一个。 一个APP运行时,对应的是我们的App…...
前端入门之CSS
CSS: HTML负责定义页面结构;JS负责处理页面逻辑和点击事件;CSS负责用于描述 HTML 元素的显示方式,通过 CSS 可以控制颜色、字体、布局等。 核心语法: 选择器: 类选择器主要用于选中需要添加样式的 HTML 元素。主要分为:类选择器(.class-name { ... })、标签选择器(…...
JavaScript逆向WebSocket协议解析与动态数据抓取
在JavaScript逆向工程中,WebSocket协议的解析和动态数据抓取是关键技能。本文将结合Fiddler、Charles Proxy和APIfox工具,详细讲解如何解析WebSocket协议并抓取动态数据。 一、WebSocket协议解析 (一)WebSocket协议的基本概念 …...
剑指Offer(数据结构与算法面试题精讲)C++版——day4
剑指Offer(数据结构与算法面试题精讲)C版——day4 题目一:和为k的子数组题目二:0和1个数相同的子数组题目三:左右两边子数组的和相等 题目一:和为k的子数组 结合前面着重阐述的双指针法这一经典的算法技巧&…...
从代码学习深度学习 - NLP之文本预处理 PyTorch版
文章目录 前言1. 文本预处理理论知识1.1 文本清洗与标准化1.2 分词(Tokenization)1.3 词频统计与词汇表构建1.4 序列表示与批次生成1.5 预处理的意义2. 文本预处理的核心代码解析2.1 读取数据集:`read_time_machine`2.2 分词处理:`tokenize`2.3 词频统计:`count_corpus`2.…...
WebRTC技术简介及应用场景
写在前面 本文是参考稀土掘金的文章,整理得出,版权归原作者所有!参考链接请点击跳转 WebRTC(Web Real-Time Communication) 是一项开源技术,允许浏览器和移动应用直接进行实时音视频通信和数据传输,无需安装插件或第三方软件。它…...
介绍几种创意登录页(含完整源码)
今天为大家收集了几种不同风格的登录页,搭配动态渐变背景,效果绝对惊艳! CSS3实现动态渐变玻璃拟态登录页 一、开篇语 纯CSS实现当下最火的玻璃拟态(Morphism)风格登录页,搭配动态渐变背景,效果绝对惊艳! …...
git分布式控制工具详解
1. 版本控制器的方式 1.1 集中式版本控制工具 特点: 版本库集中存放在中央服务器必须联网才能工作(局域网/互联网)个人修改后提交到中央版本库 举例:SVN、CVS 1.2 分布式版本控制工具 特点: 无"中央服务器&qu…...
Uni-app入门到精通:uni-app的基础组件
1、view view是容器组件,类似于HTML中的<div></div>标签,用于包裹各种元素内容,是页面布局常用的组件。view组件的属性如下 属性类型默认值说明hover-classStringnone指定按下去的样式类。当hover-class"none"时&…...
R语言从专家到小白
文章目录 下载安装R下载安装R StudioCRAN 下载安装R Index of /bin https://cran.r-project.org/ 下载安装R Studio https://posit.co/download/rstudio-desktop/ CRAN R综合档案网络。 CRAN 镜像是一个提供 R 语言软件和包的在线服务,用户可以从不同的地区选择…...
显示器工艺简介
华星光电显示器的生产工艺流程介绍,从入厂原料到生产出显示器的整体工艺介绍 华星光电显示器的生产工艺流程主要包括以下几个阶段,从原材料入厂到最终显示器的生产: 原材料准备 玻璃基板:显示器的核心材料,通常采用超…...
大文件上传源码,支持单个大文件与多个大文件
大文件上传源码,支持单个大文件与多个大文件 Ⅰ 思路Ⅱ 具体代码前端--单个大文件前端--多个大文件前端接口后端 Ⅰ 思路 具体思路请参考我之前的文章,这里分享的是上传流程与源码 https://blog.csdn.net/sugerfle/article/details/130829022 Ⅱ 具体代码…...
C语言--插入排序
插入排序:简单而高效的排序算法 在计算机科学中,排序是一种常见的操作,用于将一组数据按照特定的顺序排列。插入排序(Insertion Sort)是一种简单直观的排序算法,它的工作原理类似于我们整理扑克牌的过程。…...
L2-024 部落 #GPLT,并查集 C++
文章目录 题目解读输入格式输出格式 思路Ac Code参考 题目解读 我们认为朋友的朋友都算在一个部落里,于是要请你统计一下,在一个给定社区中,到底有多少个互不相交的部落?并且检查任意两个人是否属于同一个部落。 输入格式 第一…...
前端面试题(三):axios有哪些常用的方法
Axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 Node.js 中发送 HTTP 请求。它提供了一些常用的方法来处理不同类型的请求。以下是 Axios 中常用的一些方法: 1. axios.get() 用于发送 GET 请求,从服务器获取数据。 axios.get(/api/d…...
JSON 基础知识(一)
第一部分:JSON 基础知识 📢 快速掌握 JSON!文章 视频双管齐下 🚀 如果你觉得阅读文章太慢,或者更喜欢 边看边学 的方式,不妨直接观看我录制的 JSON 课程视频!🎬 视频里会用更直观…...
SSM框架学习(Day-1)
1.spring系统架构 自底而上进行,上层依赖于下层,首先最底层是Core Container -- 核心容器, 再往上是AOP(面向切面编程)和Aspects(AOP)思想的实现, 我个人的理解是, 它可以在不惊动你原始程序的基础上, 给它增强功能,类似于反射;再往上是数据访问层。 C…...
使用 PyTorch 的 `GradualWarmupScheduler` 实现学习率预热
使用 PyTorch 的 GradualWarmupScheduler 实现学习率预热 在深度学习中,学习率(Learning Rate, LR)是影响模型训练效果的关键超参数之一。为了提升模型的收敛速度和稳定性,学习率调度策略变得尤为重要。其中,学习率预热(Learning Rate Warmup) 是一种常用的策略,它通过…...
Redis 中 Set(例如标签) 和 ZSet(例如排行榜) 的详细对比,涵盖定义、特性、命令、适用场景及总结表格
以下是 Redis 中 Set 和 ZSet 的详细对比,涵盖定义、特性、命令、适用场景及总结表格: 1. 核心定义 数据类型SetZSet(Sorted Set)定义无序的、唯一的字符串集合,元素不重复。有序的、唯一的字符串集合,每个…...
在线记事本——支持Markdown
项目地址 https://github.com/Anyuersuper/CloudNotebook 百度网盘 通过网盘分享的文件:CloudNotebook-master.zip 链接: https://pan.baidu.com/s/1_Y--aBzNkKiFRIMHYmwPdA?pwdyuer 提取码: yuer 📝 云笔记 (Cloud Notebook) 云笔记是一个简洁、安全…...
C# 中充血模型和贫血模型
在C#中,充血模型(Rich Domain Model)和贫血模型(Anemic Domain Model)是两种截然不同的领域建模方式,核心区别在于业务逻辑的归属。以下是通俗易懂的解释: 1. 贫血模型ÿ…...
Java技术生态前沿洞察:虚拟线程引领并发革命,框架创新赋能云原生时代
Java技术生态正迎来新一轮变革浪潮。虚拟线程的落地成为高并发编程范式转折点,其极低资源开销特性在电商秒杀场景中展现出3倍吞吐量提升,彻底改写传统线程模型性能边界。Spring Boot 3.2原生支持虚拟线程,结合Observation API与HTTP客户端优化…...
Day2:前端项目uniapp壁纸实战
先来做一个轮番图。 效果如下: common-style.css view,swiper,swiper-item{box-sizing: border-box; } index.vue <template><view class"homeLayout"><view class"banner"><swiper circular indicator-dots autoplay…...
