【学Python自动化】 6. Python 模块系统学习笔记

一、模块基础

什么是模块?

  • 包含 Python 定义和语句的 .py 文件

  • 解决代码复用和组织问题

  • 每个模块有自己的命名空间

创建模块示例


# fibo.py - 斐波那契模块
def fib(n):"""打印小于n的斐波那契数列"""a, b = 0, 1while a < n:print(a, end=' ')a, b = b, a + bprint()def fib2(n):"""返回小于n的斐波那契数列列表"""result = []a, b = 0, 1while a < n:result.append(a)a, b = b, a + breturn result

二、模块详解

导入方式

  1. 基本导入

import fibo
fibo.fib(1000)  # 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
fibo.fib2(100)  # [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
  1. 导入特定函数

from fibo import fib, fib2
fib(500)  # 直接使用,无需模块名前缀
  1. 导入所有(不推荐)

from fibo import *  # 可能污染命名空间
  1. 使用别名

import fibo as fib
fib.fib(500)from fibo import fib as fibonacci
fibonacci(500)

模块特性

  • 一次性初始化:模块代码只在第一次导入时执行

  • 独立命名空间:避免命名冲突

  • 可重载:使用 importlib.reload()

1 以脚本方式执行模块

双重用途模式


# 在模块末尾添加:
if __name__ == "__main__":import sysfib(int(sys.argv[1]))

使用方法:


# 作为脚本执行
python fibo.py 50
# 输出: 0 1 1 2 3 5 8 13 21 34# 作为模块导入
import fibo  # 不执行测试代码
2 模块搜索路径

Python 搜索模块的顺序:

  1. 内置模块 (sys.builtin_module_names)

  2. sys.path 中的目录:

  • 当前脚本目录

  • PYTHONPATH 环境变量

  • 标准库和 site-packages


import sys
print(sys.path)  # 查看搜索路径
sys.path.append('/my/module/path')  # 添加自定义路径
3 编译的 Python 文件
  • 缓存文件:pycache/module.version.pyc

  • 自动对比源码修改日期

  • 提高加载速度,不影响执行速度

优化选项:


python -O script.py    # 去除断言
python -OO script.py   # 去除断言和文档字符串

三、标准模块

常用标准模块


import sys# 交互模式提示符
sys.ps1 = 'C> '  # 主提示符
sys.ps2 = '... '  # 次提示符(仅交互模式)# 模块搜索路径操作
sys.path.append('/ufs/guido/lib/python')# 平台特定模块
try:import winreg  # 仅Windows可用
except ImportError:print("winreg module not available")

四、dir() 函数

查看对象内容


import fibo, sys# 查看模块内容
print(dir(fibo))  # ['__name__', 'fib', 'fib2']
print(dir(sys))   # 显示sys模块的所有属性# 查看当前命名空间
a = [1, 2, 3, 4, 5]
import fibo
fib = fibo.fib
print(dir())  # 显示所有当前定义的名称# 查看内置函数
import builtins
print(dir(builtins))

五、包(Package)

包的结构


sound/                          # 顶层包__init__.py               # 初始化包(必需)formats/                  # 子包__init__.pywavread.pywavwrite.pyeffects/                  # 子包__init__.pyecho.pysurround.pyfilters/                  # 子包__init__.pyequalizer.py

导入方式

  1. 绝对导入

import sound.effects.echo
sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)
  1. 从包中导入模块

from sound.effects import echo
echo.echofilter(input, output, delay=0.7, atten=4)
  1. 直接导入函数

from sound.effects.echo import echofilter
echofilter(input, output, delay=0.7, atten=4)
1 从包中导入 *

控制导入内容


# sound/effects/__init__.py
__all__ = ["echo", "surround", "reverse"]# 使用
from sound.effects import *  # 只导入 __all__ 中指定的模块

注意事项


# 如果本地有同名函数,会覆盖子模块
__all__ = ["echo", "surround", "reverse"]def reverse(msg: str):  # 这会覆盖 reverse.py 子模块return msg[::-1]
2 相对导入

包内模块引用


# 在 sound/effects/surround.py 中
from . import echo        # 从当前包导入
from .. import formats    # 从上级包导入  
from ..filters import equalizer  # 从兄弟包导入

注意: 主模块必须使用绝对导入

3 多目录中的包

扩展包路径


# 修改包的搜索路径
import mypackage
mypackage.__path__.append("/path/to/extra/modules")

六、⚡ 重要特性总结

模块特性

  • name 变量:模块名,“main” 表示直接运行

  • 独立命名空间:避免全局变量污染

  • 一次性初始化:避免重复执行初始化代码

包特性

  • 必须包含 init.py:标识目录为包

  • 分层组织:使用点号表示法

  • 相对导入:支持包内模块间的相对引用

最佳实践

  • 使用绝对导入:提高代码可读性和可维护性

  • 避免 from module import *:明确导入所需内容

  • 使用 if name == “main”:使模块可执行也可导入

  • 合理组织包结构:按功能划分模块

七、🔧 实用技巧

动态导入


# 按需导入模块
module_name = "json"
json = __import__(module_name)# 使用 importlib
import importlib
json = importlib.import_module("json")

查看模块信息


import mathprint(math.__name__)    # 模块名
print(math.__file__)    # 模块文件路径
print(math.__doc__)     # 模块文档字符串

重载模块


# 开发时重新加载模块
import importlib
importlib.reload(module_name)

八、🎯 模块系统优势

  • 代码复用:避免重复造轮子

  • 命名空间管理:避免命名冲突

  • 代码组织:大型项目的结构化基础

  • 维护性:便于团队协作和代码维护

Python 的模块系统是其生态系统繁荣的基础,理解和熟练使用模块系统是成为 Python 开发高手的关键一步!

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

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

相关文章

机器学习-时序预测2

门控循环单元GRU 接着机器学习-时序预测1-CSDN博客这个说&#xff0c;GRU是LSTM的一个简化而高效的变体&#xff0c;都使用“门控机制”来控制信息流&#xff0c;但它通过合并一些组件&#xff0c;使结构更简单、参数更少、计算更快&#xff0c;同时在许多任务上性能与 LSTM 相…

数据湖与数据仓库

大数据前沿技术详解 目录 数据湖技术湖仓一体架构数据网格实时流处理技术云原生数据技术数据治理与血缘AI原生数据平台边缘计算与大数据 核心内容包括&#xff1a; 数据湖技术 - 架构模式、技术栈、面临的挑战 湖仓一体架构 - Delta Lake、Iceberg、Hudi等主流实现 数据网格…

Python OpenCV图像处理与深度学习:Python OpenCV入门-图像处理基础

Python OpenCV入门实践&#xff1a;图像处理基础 学习目标 通过本课程&#xff0c;学员们将了解OpenCV的基本概念、安装方法&#xff0c;掌握如何使用Python和OpenCV进行基本的图像处理操作&#xff0c;包括图像的读取、显示、保存以及简单的图像变换。 相关知识点 Python Open…

【lua】Lua 入门教程:从环境搭建到基础编程

Lua 入门教程&#xff1a;从环境搭建到基础编程 Lua 是一种轻量级、可扩展的脚本语言&#xff0c;广泛应用于游戏开发&#xff08;如《魔兽世界》《Roblox》&#xff09;、嵌入式系统、Web 后端等领域。它语法简洁、运行高效&#xff0c;非常适合作为编程入门语言或辅助开发工…

MySQL索引事务(未完成)

索引的相关操作1.查看索引show index from 表名;2.创建索引create index 索引名字 on 表名(列名);创建索引&#xff0c;是一个危险操作创建索引的时候&#xff0c;需要针对现有的数据&#xff0c;进行大规模的重新整理如果当前表是一个空表&#xff0c;或者数据不多&#xff0c…

Docker一键快速部署压测工具,高效测试 API 接口性能

以下是对该压测工具的简单介绍&#xff1a; 这是一个简易的在线压测工具&#xff0c;可以对 API 接口/页面、websocket服务等进行压力测试&#xff0c;检验服务的并发能力使用 thinkphp ant design pro 构建&#xff0c;压测能力驱动基于 wrk 、 php 多进程协程实现支持在线授…

前端缓存问题详解

前端缓存是提升网页性能和用户体验的重要手段&#xff0c;但也常导致资源更新不及时等问题。以下是关于前端缓存的核心知识点和解决方案&#xff1a; 一、缓存类型及工作原理HTTP缓存&#xff08;最核心&#xff09; 强缓存&#xff1a;直接从本地读取&#xff0c;不请求服务器…

webpack升级

一、调研对比维度Webpack 4 状态Webpack 5 改进与优势构建速度较慢&#xff0c;增量构建效率低✅ 引入 持久化缓存&#xff08;filesystem cache&#xff09;&#xff0c;二次构建速度提升高达 90%Tree Shaking支持基础 Tree Shaking&#xff0c;需手动配置✅ 更强的 Tree Shak…

Logstash数据迁移之es-to-kafka.conf详细配置

在 Logstash 中配置从 Elasticsearch (ES) 读取数据并输出到 Kafka 是一个相对高级但强大的用法&#xff0c;通常用于数据迁移、重新索引、或构建新的数据管道。 下面我将详细解释配置文件的各个部分和细节。 核心配置文件结构 (es-to-kafka.conf) 一个完整的配置文件主要包含三…

在OracleLinux9.4系统上静默滚动打补丁安装Oracle19c

OracleLinux9.4系统 安装Oracle19c 文章目录OracleLinux9.4系统 安装Oracle19c一、安装准备1、yum安装预检查需要的包2、系统资源二、滚动安装一、安装准备 1、yum安装预检查需要的包 yum install libnsl yum install -y oracle-database-preinstall-19c # 最新的unzip yum i…

Android原生HttpURLConnection上传图片方案

创建上传方法object FormUploader {private val BOUNDARY "Boundary-" System.currentTimeMillis()private const val LINE_FEED "\r\n"Throws(IOException::class)fun uploadImage(url: String, imageFile: File, params: MutableMap<String?, Str…

落叶清扫机器人cad+三维图+设计说明书

摘 要 城市公共场所、校园等环境中&#xff0c;落叶的清扫一直是一个繁琐而耗时的任务。传统的人工清扫方式不仅效率低下&#xff0c;还存在人力浪费和安全隐患等问题。因此&#xff0c;研发一款能够自主完成落叶清扫任务的机器人成为了当今研究的热点之一。随着科技的不断进…

国别域名的SEO优势:是否更利于在当地搜索引擎排名?

当你盯着搜索引擎结果页发呆时&#xff0c;有没有想过——凭什么那个.jp域名的网站能排在.ca前面&#xff1f;别扯什么内容质量&#xff0c;上周帮客户优化新加坡市场时&#xff0c;亲眼见着两个内容相似度90%的页面&#xff0c;.sg域名比.com.au在Google Singapore上高出3个排…

动态配置最佳实践:Spring Boot 十种落地方式与回滚审计指南(含实操与避坑)

作为一名Spring Boot开发者&#xff0c;正在运维一个高可用微服务系统&#xff1a;业务需求变化频繁&#xff0c;需要实时调整配置如数据库连接或日志级别&#xff0c;但每次修改都得重启应用&#xff0c;造成服务中断和用户投诉。这不是小麻烦&#xff0c;而是配置管理的痛点—…

vue社区网格化管理系统(代码+数据库+LW)

摘要 随着城市化进程的加快&#xff0c;社区管理的复杂性逐渐增大&#xff0c;传统的管理模式已无法满足现代社区管理的需求。社区网格化管理系统作为一种新的管理模式&#xff0c;通过将社区划分为多个网格单元&#xff0c;使得管理更加精细化、智能化和高效化。本论文基于Sp…

使用EasyExcel实现Excel单元格保护:自由锁定表头和数据行

使用EasyExcel实现Excel单元格保护&#xff1a;锁定表头和第二行数据 前言 在日常开发中&#xff0c;我们经常需要导出Excel文件&#xff0c;有时还需要对Excel中的某些单元格进行保护&#xff0c;防止用户误修改。本文将介绍如何使用EasyExcel 4.0.3实现锁定Excel表头和第二行…

dify docker知识库topk最大值参数配置

1 问题说明 dify构建RAG知识库过程中&#xff0c;通过会遇到一些默认配置不能解决的问题。 比如topk&#xff0c;topk默认最大10&#xff0c;对语义模糊的检索&#xff0c;目标文档可能没进前10&#xff0c;出现在10-30区间。 所以&#xff0c;需要调整topk最大值参数。 # T…

SRE命令行兵器谱之一:精通top/htop - 从性能“体检”到瓶颈“解剖”

SRE命令行兵器谱之一:精通top/htop - 从性能“体检”到瓶颈“解剖” SRE的“战场”:真实故障场景 下午三点,监控系统告警:“核心API服务响应时间(P99)飙升至5秒”。用户已经开始在群里抱怨接口超时。这是一个典型的线上性能问题,每一秒的延迟都在影响用户体验和公司收…

一、Git与Gitee常见问题解答

Git与Gitee常见问题解答 Git相关问题 Q1: 什么是Git&#xff1f; A: Git是一个分布式版本控制系统&#xff0c;由Linux之父Linus Torvalds开发。它能够跟踪文件的变更历史&#xff0c;支持多人协作开发&#xff0c;是现代软件开发中不可或缺的工具。 Q2: Git的三个区域是什么&a…

kubernetes服务质量之QoS类

一、QoS类 Kubernetes的QoS&#xff08;Quality of Service&#xff09;类别允许您指定可用于应用程序的可用资源数量&#xff0c;以便更好地控制应用程序的可用性。它还允许您限制特定应用程序的资源使用率&#xff0c;以帮助保护系统的稳定性和性能。 Kubernetes 创建 Pod 时…