【库(Library)、包(Package)和模块(Module)解析】

在Python中,**库(Library)、包(Package)和模块(Module)**是代码组织的不同层级,而import语句的导入行为与它们密切相关。以下是详细对比和解释:


📦 1. 核心概念对比

术语定义示例文件结构
模块单个.py文件,包含Python代码(变量、函数、类)math.pymath.py
特殊的模块集合,包含__init__.py文件的目录numpy(文件夹)numpy/__init__.py
广义概念,指可复用的代码集合(可能包含多个包/模块)requests由多个包/模块组成

🔍 2. import导入的实质

(1) 导入目标
import xxx  # 导入的是模块/包本身(如`import numpy`)
from xxx import yyy  # 从模块/包中导入具体对象(如`from math import sqrt`)
(2) 导入时的查找顺序
  1. 内置模块(如sysmath
  2. sys.path中的路径(包括当前目录、PYTHONPATH等)
  3. 安装的第三方库site-packages目录)

📂 3. 文件结构示例

模块
# my_module.py
def hello():print("Hello from module!")

导入方式:

import my_module
my_module.hello()
my_package/
├── __init__.py       # 包标识文件(可为空)
├── module1.py        # 子模块
└── subpackage/       # 子包└── __init__.py

导入方式:

from my_package.module1 import some_function

4. 常见疑问解答

Q1:import numpy时到底导入了什么?
  • 导入的是numpy包的顶层模块(即numpy/__init__.py中定义的内容)
  • 实际使用时,Python会按需加载子模块(如numpy.array
Q2:库和包的区别?
  • 是功能集合的抽象概念(如Pandas库)
  • 是库的物理组织形式(如pandas包包含pandas/corepandas/io等子包)
Q3:为什么要有__init__.py
  • 标识目录为Python包(Python 3.3+后可省略,但显式声明更规范)
  • 初始化包级变量或控制导入行为(如__all__列表)

💡 5. 最佳实践

✅ 推荐做法
# 明确导入层级(避免命名冲突)
from package.subpackage import specific_function# 使用别名简化长包名
import matplotlib.pyplot as plt
❌ 避免行为
# 通配符导入(污染命名空间)
from module import *  # 重复导入相同模块(浪费资源)
import module
import module  # 无意义

🌰 6. 实战案例

场景:自定义一个包
my_utils/
├── __init__.py           # 声明为包
├── math_utils.py         # 模块:数学工具
└── string_utils.py       # 模块:字符串工具

__init__.py(控制导入行为):

# 允许直接导入包时访问子模块
from .math_utils import add, multiply
from .string_utils import reverse_string__all__ = ['add', 'multiply', 'reverse_string']  # 定义*导入的范围

使用方式

import my_utils
my_utils.add(1, 2)  # 直接调用from my_utils import reverse_string
reverse_string("abc")  # 'cba'

📚 总结

概念本质import行为典型用途
模块单个.py文件导入文件中的所有代码组织小规模功能
__init__.py的目录导入包初始化内容或子模块组织大型项目代码
功能集合的抽象概念通过导入其下的包/模块使用指代第三方功能集合

理解这些区别有助于:

  • 更规范地组织代码
  • 避免导入冲突
  • 优化项目结构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/82307.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

裸机上的 printf:在无操作系统环境下构建 C 标准库

在嵌入式开发和底层系统编程领域,裸机开发是一项极具挑战性但又至关重要的任务。想象一下,在没有操作系统支持的情况下,让 C 语言的标准库函数,如printf正常工作,这听起来是不是很有趣又充满挑战?今天&…

基于STM32F103的智能机械臂识别与控制项目(课件PPT+源代码)

以下是基于 STM32F103 的智能机械臂识别与控制项目的详细介绍: 项目概述 该项目以 STM32F103 为核心控制器,结合多种传感器和技术,实现了机械臂的智能识别与控制功能,可完成仓库货物的识别、搬运等任务,并支持多种控…

Codeforces Round 1023 (Div. 2)

Dashboard - Codeforces Round 1023 (Div. 2) - Codeforces 一个构造问题&#xff0c;我把最大的数放在一个数组&#xff0c;其余数放在另一个数组&#xff0c;就能保证gcd不同 来看代码&#xff1a; #include <bits/stdc.h> using namespace std;int main() {int t;ci…

6.01 Python中打开usb相机并进行显示

本案例介绍如何打开USB相机并每隔100ms进行刷新的代码,效果如下: 一、主要思路: 1. 打开视频流、读取帧 self.cam_cap = cv2.VideoCapture(0) #打开 视频流 cam_ret, cam_frame = self.cam_cap.read() //读取帧。 2.使用定时器,每隔100ms读取帧 3.显示到Qt的QLabel…

JVM——即时编译

分层编译模式&#xff1a;动态平衡启动速度与执行效率 分层编译是现代JVM&#xff08;如HotSpot、GraalVM&#xff09;实现高性能的核心策略之一&#xff0c;其核心思想是根据代码的执行热度动态选择不同的编译层次&#xff0c;实现启动速度与运行效率的最佳平衡。以HotSpot虚…

Auto DOP:让并行执行实现智能调优 | OceanBase 实践

随着数据量的迅速增长&#xff0c;企业数据库往往面临着一个困局&#xff1a;复杂的分析查询需要充分的资源来保证性能&#xff0c;但过多增加并行执行又会造成资源竞争&#xff0c;影响系统稳定性。传统基于DBA人工干预的并行度调节机制&#xff0c;既低效又难以适应动态变化的…

【区块链】Uniswap之滑点(Slippage)

一、滑点是什么&#xff1f; 滑点&#xff08;Slippage&#xff09;是指你下单预期价格和最终成交价格之间的差距。 在 DEX 中&#xff0c;你的交易会影响池子的价格&#xff08;AMM机制&#xff09;&#xff0c;所以&#xff1a; 下单越大&#xff0c;滑点越大&#xff1b;…

[前端]Javascript获取元素宽度

元素宽度属性对比示意图 ---------------------------------- | 外边距&#xff08;margin&#xff09; | -------------------------------- | | 边框&#xff08;border&#xff09; | | | -------------------------- | | | …

数字人驱动/动画方向最新顶会期刊论文收集整理 | AAAI 2025

会议官方论文列表&#xff1a;https://ojs.aaai.org/index.php/AAAI/issue/view/624 以下论文部分会开源代码&#xff0c;若开源&#xff0c;会在论文原文的摘要下方给出链接。 语音驱动头部动画/其他 EchoMimic: Lifelike Audio-Driven Portrait Animations through Editabl…

Windows系统下【Celery任务队列】python使用celery 详解(一)

Celery 是一个基于 Python 的分布式任务队列框架&#xff0c;它允许你在不同的进程甚至不同的服务器上异步执行任务。 特点 简单&#xff1a;易于使用和配置&#xff0c;提供了简洁的 API。高可用&#xff1a;支持任务的可靠交付&#xff0c;即使在出现故障时也能保证任务不丢…

移动设备常用电子屏幕类型对比

概述 LCD 家族 &#xff08;TN、STN、TFT、IPS、VA&#xff09;依赖背光&#xff0c;性能差异主要来自液晶排列和驱动方式。OLED 以自发光为核心优势&#xff0c;但成本与寿命限制其普及。E-Paper 专为低功耗静态显示设计&#xff0c;与传统屏幕技术差异显著。 参数LCD&#…

Vue3.5 企业级管理系统实战(十八):用户管理

本篇主要探讨用户管理功能&#xff0c;接口部分依然是使用 Apifox mock 模拟。 1 用户 api 在 src/api/user.ts 中添加用户相关 CRUD 接口&#xff0c;代码如下&#xff1a; //src/api/user.ts import request from "/api/config/request"; // 从 "./type&q…

【C】初阶数据结构14 -- 归并排序

本篇文章主要是讲解经典的排序算法 -- 归并排序 目录 1 递归版本的归并排序 1&#xff09; 算法思想 2&#xff09; 代码 3&#xff09; 时间复杂度与空间复杂度分析 &#xff08;1&#xff09; 时间复杂度 &#xff08;2&#xff09; 空间复杂度 2 迭代版本的归并…

【相机标定】OpenCV 相机标定中的重投影误差与角点三维坐标计算详解

摘要&#xff1a; 本文将从以下几个方面展开&#xff0c;结合典型代码深入解析 OpenCV 中的相机标定过程&#xff0c;重点阐述重投影误差的计算方法与实际意义&#xff0c;并通过一个 calcBoardCornerPositions() 函数详细讲解棋盘格角点三维坐标的构建逻辑。 在计算机视觉领域…

RabbitMQ-运维

文章目录 前言运维-集群介绍多机多节点单机多节点 多机多节点下载配置hosts⽂件配置Erlang Cookie启动节点构建集群查看集群状态 单机多节点安装启动两个节点再启动两个节点验证RabbitMQ启动成功搭建集群把rabbit2, rabbit3添加到集群 宕机演示仲裁队列介绍raft算法协议 raft基…

JVM之内存管理(一)

部分内容来源&#xff1a;JavaGuide二哥Java 图解JVM内存结构 内存管理快速复习 栈帧&#xff1a;局部变量表&#xff0c;动态链接&#xff08;符号引用转为真实引用&#xff09;&#xff0c;操作数栈&#xff08;存储中间结算结果&#xff09;&#xff0c;方法返回地址 运行时…

无线射频模块如何通过CE RED认证?关键规范与准备策略详解

随着无线通信设备在欧洲市场的广泛应用&#xff0c;CE RED认证已成为模块类产品进入欧盟的强制通行证。作为专注于LoRa模块、对讲模块与FSK射频模块研发的技术企业&#xff0c;我们深知从设计、测试到量产&#xff0c;每一个环节都需紧扣合规底线。本文将围绕CE RED认证核心要求…

Golang中集合相关的库

一切编程语言的底层结构都是数组&#xff0c;其它复杂数据结构如Map, Stack&#xff0c;Heap和Queue都是基于数组建立起来的。 Go语言主流工具库推荐&#xff08;含常用数据结构实现&#xff09; 以下是目前Go生态中最主流且活跃的工具库&#xff0c;包含队列、栈、优先级队列…

ABAP 导入Excel形成内表

文章目录 创建导入模板程序实现代码代码解析运行结果 创建导入模板 程序实现 代码 *&---------------------------------------------------------------------* *& Report Z_EXCEL_UPLOAD_LHY *&--------------------------------------------------------------…

特殊配合力(SCA)作为全基因组关联分析(GWAS)的表型,其生物学意义和应用价值

生物学意义 解析非加性遗传效应 特殊配合力(SCA)主要反映特定亲本组合的杂交优势,由非加性遗传效应(如显性、超显性、上位性)驱动。显性效应涉及等位基因间的显性互作,上位性效应则涉及不同位点间的基因互作。通过SCA-GWAS,可以定位调控这些非加性效应的关键基因组区域…