【Python 模块】

Python 中的模块(Module)是组织代码的核心方式,通过将相关函数、类和变量封装到独立文件中,实现代码复用和结构化管理。以下是模块的核心知识点:


一、基础概念

1. 模块定义
  • 任何 .py 文件都是一个模块
  • 模块名即文件名(不含 .py 后缀)
2. 模块结构
# my_module.pyPI = 3.14159  # 模块级变量def add(a, b):"""加法函数"""return a + bclass Calculator:"""计算器类"""def subtract(self, a, b):return a - b

二、模块导入

1. 基础导入
import math          # 导入整个模块
from datetime import datetime  # 导入特定对象
import numpy as np   # 导入并设置别名
2. 导入行为
  • 首次导入时执行模块代码
  • 后续导入直接引用已加载模块
  • 模块级代码(如变量定义、函数声明)只会执行一次

三、标准库模块

1. 常用内置模块
模块用途示例方法/类
math数学运算math.sqrt(), math.pi
os操作系统交互os.listdir(), os.path
sysPython解释器相关sys.argv, sys.exit()
datetime日期时间处理datetime.now()
jsonJSON数据编解码json.dumps(), json.load()
2. 示例代码
import mathprint(math.sqrt(16))    # → 4.0
print(math.factorial(5))# → 120

四、第三方模块

1. 包管理工具
pip install requests    # 安装模块
pip list               # 查看已安装模块
pip freeze > requirements.txt  # 导出依赖
2. 虚拟环境
python -m venv myenv   # 创建虚拟环境
source myenv/bin/activate  # Linux/Mac激活
myenv\Scripts\activate.bat  # Windows激活

五、模块搜索路径

import sys
print(sys.path)  # 输出模块搜索路径列表# 添加自定义路径(临时)
sys.path.append("/custom/module/path")

六、高级特性

1. 包(Package)
my_package/
├── __init__.py       # 包初始化文件
├── module1.py
└── sub_package/├── __init__.py└── module2.py
2. 相对导入
# 在 sub_package/module2.py 中
from . import module1  # 相对导入同级模块
from .. import utils   # 相对导入上级模块
3. 动态导入
import importlibmodule = importlib.import_module("my_module")
obj = getattr(module, "my_function")
obj()
4. 模块重载
from importlib import reloadreload(my_module)  # 重新加载已修改的模块

七、最佳实践

1. 模块设计原则
  • 单一职责原则:每个模块专注单一功能
  • 明确API:通过 __all__ 定义公开接口
    # my_module/__init__.py
    __all__ = ["public_func", "PublicClass"]
    
2. 避免循环导入
# 错误示例:a.py 导入 b.py,b.py 又导入 a.py
# 正确做法:重构代码结构,提取公共部分到独立模块
3. 类型提示支持
# my_module.py
from typing import Listdef process_data(data: List[int]) -> List[float]:return [x * 1.1 for x in data]

八、实际案例分析

1. 配置管理模块
# config.py
DEBUG = False
DB_CONFIG = {"host": "localhost","port": 3306,"user": "admin"
}
2. 工具函数模块
# utils.py
import hashlibdef md5_checksum(data: bytes) -> str:return hashlib.md5(data).hexdigest()
3. 业务逻辑模块
# order_processor.py
from .config import DB_CONFIG
from .utils import md5_checksumclass OrderProcessor:def __init__(self):self.db_config = DB_CONFIGdef process(self, order_data):checksum = md5_checksum(order_data.encode())# 存储到数据库...

九、常见陷阱

  1. 命名冲突

    # 错误示例:与标准库模块同名
    import string  # 实际导入自定义string.py而非标准库
    
  2. 缓存失效

    # 修改模块后未重新启动解释器导致缓存未更新
    # 解决方案:使用reload()或重启Python进程
    
  3. 跨平台路径

    # 使用os.path处理路径而非硬编码
    import os
    config_path = os.path.join("config", "settings.ini")
    

通过合理组织模块结构,可以构建可维护的大型项目。建议从简单模块开始,逐步掌握包管理和高级导入技巧,最终形成清晰的代码架构。

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

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

相关文章

黑电平校正(Black Level Correction, BLC)算法

黑电平校正(Black Level Correction, BLC)算法 黑电平校正(BLC)是图像传感器(如CMOS/CCD)信号处理中的一个重要步骤,主要用于消除传感器暗电流(Dark Current)导致的基线…

处理PostgreSQL数据库事务死锁过程

查询pg_locks表,获取未得到满足的锁信息: select * from pg_locks where granted is false ; --查询得不到锁的,那就是两个互相等待对方持有的锁查询活动的事务会话进程,和上一步的锁的事务对应起来: select * from …

Android开发-文本显示

在Android应用开发中,文本显示是用户界面设计中最基本也是最重要的部分之一。无论是展示欢迎信息、错误提示还是动态内容,合理地使用文本元素能够极大地提升用户体验。本文将详细介绍如何在Android应用中有效地显示文本,包括使用TextView组件…

基于大模型的输卵管妊娠全流程预测与治疗方案研究报告

一、引言 1.1 研究背景与意义 输卵管妊娠作为异位妊娠中最为常见的类型,严重威胁着女性的生殖健康和生命安全。受精卵在输卵管内着床发育,随着胚胎的生长,输卵管无法提供足够的空间和营养支持,极易引发输卵管破裂、大出血等严重并发症,若救治不及时,甚至会导致孕产妇死…

当向量数据库与云计算相遇:AI应用全面提速

如果将AI比作一台高速运转的机器引擎,那么数据便是它的燃料。 然而,存储数据的燃料库--传统数据库,在AI时代的效率瓶颈愈发明显,已经无法满足AI对于数据的全新需求。 因此,向量数据库近年来迅速崛起。向量数据库通过…

Media3 中 Window 的时间相关属性详解

AndroidX Media3 的 Timeline.Window 类中,与时间相关的属性描述了媒体播放窗口(window)在时间维度上的关键信息。这些属性帮助开发者理解媒体的播放范围、起始点、持续时间以及与设备时间或直播流的同步关系。 Timeline.Window 的时间相关属…

【Python爬虫电商数据采集+数据分析】采集电商平台数据信息,并做可视化演示

前言 随着电商平台的兴起,越来越多的人开始在网上购物。而对于电商平台来说,商品信息、价格、评论等数据是非常重要的。因此,抓取电商平台的商品信息、价格、评论等数据成为了一项非常有价值的工作。本文将介绍如何使用Python编写爬虫程序&a…

工业相机的芯片CRA角度与镜头选型的匹配关系

工业相机的芯片CRA角度与镜头选型的匹配关系 Baumer工业相机​工业相机的芯片CRA角度的技术背景​工业相机的芯片CRA的信息CRA相差过大的具体表现怎样选择工业相机sensor的CRABaumer工业相机sensor的CRA工业相机的芯片CRA角度与镜头匹配好的优点 Baumer工业相机 工业相机是常用…

深度学习中常见的矩阵变换函数汇总(持续更新...)

1. 转置操作 (Transpose) 概念:将矩阵的行和列互换应用场景: 在卷积神经网络中转换特征图维度矩阵乘法运算前的维度调整数据预处理过程中的特征重排 原始矩阵 A [[1, 2, 3], 转置后 A^T [[1, 4],[4, 5, 6]] [2, 5],[3, 6]]代码…

day 14 SHAP可视化

一、原理——合作博弈论 SHAP(SHapley Additive exPlanations)是一种用于解释机器学习模型预测结果的方法,它基于合作博弈论中的 Shapley 值概念。Shapley 值最初用于解决合作博弈中的利益分配问题。假设有 n 个参与者共同合作完成一项任务并…

从0开始学习大模型--Day03--Agent规划与记忆

规划(planning) 规划,可以为理解观察和思考。如果用人类来类比,当我们接到一个任务,我们的思维模式可能会像下面这样: 1、首先会思考怎么完成这个任务。 2、然后会审视手头上所拥有的工具,以及如何使用这…

使用 Couchbase Analytics Service 的典型步骤

下面是使用 Couchbase Analytics Service 的典型步骤,包括部署、配置、创建数据集、运行查询以及监控优化等环节。 首先,您需要安装并启用 Analytics 服务;然后将节点加入集群并重平衡;接着在 Analytics 中映射数据服务的集合&am…

从零开始学习人工智能(Python高级教程)Day6-Python3 正则表达式

一、Python3 正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。 在 Python 中,使用 re 模块来处理正则表达式。 re 模块提供了一组函数,允许你在字符串中进行模式匹配、搜索和替换操作。 r…

MATLAB导出和导入Excel文件表格数据并处理

20250507 1.MATLAB使用table函数和writetable函数将数据导出Excel表格文件 我们以高斯函数为例子,高斯函数在数学和工程领域有着广泛的应用,它的一般形式为: 其中是均值,决定了函数的中心位置; 是标准差,决…

推荐一组WPF自定义控件开源项目

.Net Core从零学习搭建权限管理系统教程 推荐一组WPF自定义控件开源项目。 项目简介 这是基于WPF开发的,为开发人员提供了一组方便使用自定义组件,并提供了各种常用的示例。 包含组件:数据表格、属性列表、树形列表、选色器、单选框列表、…

allegro出gerber时,单击Artwork并没有弹窗的问题

使用allegro出gerber时,有时点击 Artwork图标并未如愿以偿的弹出窗口。。。 可按下面尝试恢复,注,删除前可先备份该两支文件。。。 看时间戳,删除最近的下面标红两支文件即可。

常用设计模式在 Spring Boot 项目中的实战案例

引言​ 在当今的软件开发领域,Spring Boot 以其高效、便捷的特性成为构建 Java 应用程序的热门框架。而设计模式作为软件开发中的宝贵经验总结,能够显著提升代码的可维护性、可扩展性和可复用性。本文将深入探讨几种常用设计模式在 Spring Boot 项目中的…

《饶议科学》阅读笔记

《饶议科学》 《偷窃的生物学机制:(有些)小偷有药可治》阅读笔记 核心内容:探讨偷窃狂(kleptomania)的生物学机制及相关研究。具体要点 偷窃狂的特征:患者不可抑制地反复偷窃个人不需要、与金钱…

从零开始搭建第一个Spring Boot应用:从入门到精通

1. Spring Boot简介与核心概念 1.1 什么是Spring Boot? Spring Boot是Spring框架的一个扩展,它简化了基于Spring的应用程序的初始搭建和开发过程。通过自动配置和约定优于配置的原则,Spring Boot让开发者能够快速启动和运行项目。 通俗理解…

c# LINQ-Query01

文章目录 查询数据源标准查询分两类即时查询已推迟流式处理非流式处理分类表聚合Aggregate<TSource,TAccumulate,TResult>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>, Func<TAccumulate,TResult>)Aggregate<TSour…