系列文章目录
个人简介:机电专业在读研究生,CSDN内容合伙人,博主个人首页
Python入门专栏:《Python入门》欢迎阅读,一起进步!🌟🌟🌟
码字不易,如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!😊😊😊
文章目录
导语
欢迎来到本系列的第十篇文章!在前面的学习中,已经介绍了 Python 的基本语法、条件和循环语句、函数、以及面向对象编程等知识。今天,我们将继续扩展 Python 技能,学习有关模块与包的内容。模块与包是 Python 中非常重要的概念,它们能够帮助组织和管理代码,提高代码的复用性和可维护性。
模块概述
Python 提供了强大的模块支持,主要体现为不仅在 Python 标准库中包含了大量的模块(称为标准模块),如 math
、random
、datetime
等,而且还有很多第三方模块,另外开发者自己也可以开发自定义模块。
模块的英文是 Modules,可以认为是一盒主题积木,通过它可以拼出某一主题的东西。这与函数不同,一个函数相当于一块积木,而一个模块中可以包括很多函数,也就是很多积木,所以也可以说模块相当于一盒积木。
在 Python 中,一个扩展名为 “py” 的文件就称之为一个模块。通常情况下,把能够实现某一特定功能的代码放置在一个文件中作为一个模块,从而方便其他程序和脚本导入并使用。另外,使用模块也可以避免函数名和变量名冲突。
自定义模块
除了使用 Python 内置的模块外,也可以自己创建和使用自定义模块。自定义模块可以将一组相关的功能放在一个文件中,并在其他程序中进行引用。
创建模块
创建模块可以将模块中相关的代码(变量定义和函数定义等)编写在一个单独的文件中,并且将该文件命名为 “模块名+.py” 的形式,也就是说,创建模块,实际就是创建一个 .py 文件。
引用模块
Python 提供了多种方式来引用模块:
使用 import 语句
使用 import
语句可以导入整个模块,并使用模块中定义的功能。
import math
result = math.sqrt(25)
print(result) # 输出 5.0
注意:使用
import
语句导入模块时,模块名是区分字母大小写的。
导入特定功能
如果只需要使用模块中的某个功能,可以使用 from ... import ...
语句。
from math import sqrt
result = sqrt(25)
print(result) # 输出 5.0
为模块或功能取别名
在导入模块时,也可以为其取一个别名,方便使用。
import math as m
from math import sqrt as square_root
result = m.sqrt(25)
print(result) # 输出 5.0
result2 = square_root(36)
print(result2) # 输出 6.0
模块搜索目录
当使用 import
语句导入模块时,默认情况下,会按照以下顺序进行查找:
- 1.内置模块:首先搜索内置的模块,例如
math
、sys
等。 - 2.当前工作目录:如果模块与当前脚本文件(或交互式会话)在同一目录下, 那么 Python 会优先从当前工作目录进行搜索。
- 3.
PYTHONPATH
路径:Python 会按照PYTHONPATH
环境变量中声明的路径顺序逐个搜索。 - 4.标准库路径:如果模块仍然未找到,则 Python 会搜索标准库的安装路径。
- 5.错误:如果在以上步骤都找不到模块,则会抛出
ModuleNotFoundError
异常。
以上各个目录的具体位置保存在标准模块 sys
的 sys.path
变量中。可以通过以下代码输出具体的目录:
import sys # 导入标准模块 sys
print(sys.path) # 输出具体目录
执行上面的代码,将显示下图所示的结果。
引用标准模块
Python 内置了大约 200 多个标准模块,它们提供了丰富的功能和工具。下面是一个常用的 Python 标准模块及其功能:
模块名 | 功能 | 示例用途 |
---|---|---|
math | 数学运算函数,如三角函数、指数对数、常量 π 等 | 计算三角函数值、计算数学表达式 |
random | 生成随机数,如随机整数、随机选择、洗牌等 | 随机数游戏、随机抽取样本数据 |
datetime | 处理日期和时间,如获取当前日期时间、格式化日期时间等 | 日期时间处理、时间戳转换 |
os | 操作系统接口,如文件和目录操作、环境变量、进程管理等 | 文件操作、目录遍历、环境变量读取 |
sys | 提供对解释器的访问,如命令行参数、标准输入输出等 | 命令行参数解析、标准输入输出重定向 |
re | 正则表达式操作,用于字符串匹配和替换 | 文本处理、数据提取 |
json | JSON 数据编码和解码 | 与其他系统交互、配置文件存储 |
csv | CSV 文件读写 | 数据处理、数据导入导出 |
urllib | URL 处理和访问网络资源 | 网络请求、网页爬虫 |
sqlite3 | SQLite 数据库操作 | 数据存储、小型数据库应用 |
collections | 扩展的容器数据类型,如deque 、Counter 、defaultdict 等 | 数据分析、数据处理 |
itertools | 提供用于高效循环的迭代器工具 | 迭代操作、组合生成器 |
argparse | 命令行参数解析 | 命令行工具、脚本参数配置 |
logging | 记录日志信息 | 应用日志、调试信息输出 |
multiprocessing | 多进程编程,支持多进程和进程间通信 | 并行处理、分布式计算 |
下载与安装第三方模块
除了 Python 内置的标准模块外,还有许多由 Python 社区贡献的第三方模块,可以为项目提供更多功能和特性。下面是常用的 Python 第三方模块及其功能:
模块名 | 功能 | 示例用途 |
---|---|---|
requests | 发送 HTTP 请求,进行网络通信 | 网络数据爬取、API调用 |
pandas | 数据处理和分析,提供 DataFrame 和 Series 数据结构 | 数据清洗、数据分析、数据可视化 |
numpy | 科学计算和数值运算,提供多维数组和矩阵操作 | 数值计算、线性代数运算 |
matplotlib | 绘制图表和可视化工具 | 数据可视化、图表绘制 |
scipy | 科学计算工具集,提供数学、科学和工程计算 | 数值计算、数据拟合、信号处理 |
beautifulsoup4 | 解析 HTML 和 XML 文档,提取网页数据 | 网页爬虫、网页数据提取 |
scrapy | 强大的网络爬虫框架 | 大规模数据爬取、数据抓取 |
django | Web 应用开发框架 | 构建Web应用、网站开发 |
flask | 轻量级 Web 应用开发框架 | 快速构建Web应用、API服务 |
sqlalchemy | SQL 数据库的 ORM(对象关系映射)框架 | 数据库操作、数据持久化 |
tensorflow | 深度学习框架 | 机器学习、神经网络模型训练 |
pytorch | 深度学习框架,提供动态计算图 | 机器学习、神经网络模型训练 |
keras | 高级神经网络 API,基于 TensorFlow 或 Theano | 快速构建和训练神经网络模型 |
nltk | 自然语言处理工具集 | 文本处理、语言分析 |
opencv-python | 计算机视觉库,用于图像和视频处理 | 图像处理、计算机视觉应用 |
selenium | 浏览器自动化测试工具 | 网页自动化操作、Web 测试 |
要使用这些第三方模块,需要先下载并安装它们。
使用pip
pip
是Python的包管理器,可以用来下载和安装第三方模块。打开命令行终端,使用以下命令来安装一个名为 requests
的第三方模块:
pip install requests
这将从 Python 官方的 PyPI(Python Package Index)仓库中下载并安装 requests
模块。
由于 Python 官方的 PyPI 仓库位于国外,如果网络连接到 PyPI 缓慢,可以通过以下使用国内镜像源来快速下载:
国内有一些镜像源提供了 Python 第三方模块的镜像,可以加快下载速度。例如,清华大学提供了 PyPI 的镜像源。在终端中使用以下命令来更换为清华大学的 PyPI 镜像源:
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
安装完成后,就可以在代码中导入并使用这个模块了。
如果想要查看 Python 中都有哪些模块(包括标准模块和第三方模块),可以在 IDLE 中输入以下命令:
help('modules')
如果只是想要查看已经安装的第三方模块,可以在命令行窗口中输入以下命令:
pip list
以主程序的形式执行
在 Python 中,可以将一个文件既作为模块引用,又可以作为独立的程序执行。这可以通过 if __name__ == "__main__":
来实现。
# my_module.py
def add(a, b):
return a + b
def subtract(a, b):
return a - b
if __name__ == "__main__":
result1 = add(5, 3)
print(result1) # 输出 8
result2 = subtract(10, 4)
print(result2) # 输出 6
当直接运行 my_module.py
时,if __name__ == "__main__":
块中的代码将会执行;而当这个文件作为模块被引用时,if __name__ == "__main__":
块中的代码将不会执行。
这是因为当 Python 解释器执行一个文件时,它会将特殊的变量 __name__
设置为一个特定的值。如果一个文件是作为独立程序执行,那么 __name__
的值将被设置为 "__main__"
;如果一个文件是被导入为模块使用,那么 __name__
的值将是模块的名称。
Python中的包
包是一种包含模块的文件夹,它允许将相关的模块组织在一起。包含一个特殊的文件 __init__.py
(可以是空文件)来表示这个文件夹是一个包。使用包的好处是更好地组织和管理模块,避免模块名称冲突,并且使代码结构更清晰。
创建包的目的不是为了运行,而是被导入使用,包只是模块的一种形式而已。
创建包
创建包实际上就是创建一一个文件夹,并且在该文件夹中创建一个名称为 __init__.py
的 Python 文件。在 __init__.py
文件中,可以不编写任何代码,也可以编写一些 Python 代码。在 __init__.py
文件中所编写的代码,在导入包时会自动执行。
例如,创建一个名为 my_package
的包,它的目录结构如下:
my_package/
__init__.py
module1.py
module2.py
subpackage/
__init__.py
module3.py
使用包
创建包以后,就可以在包中创建相应的模块,然后再使用import语句从包中加载模块。从包中加
载模块通常有以下3种方式:
- 通过 “import +完整包名.模块名” 形式加载指定模块;
- 通过 “from + 完整包名+ import + 模块名” 形式加载指定模块
- 通过 “from + 完整包名.模块名 + import + 定义名” 形式加载指定模块
结语
本篇博客,介绍了 Python 中模块与包的概念、自定义模块、导入模块、以及以主程序形式执行代码。模块与包是 Python 中组织代码、实现复用性和可维护性的重要工具,希望你能在今后的编程中善于运用它们。感谢阅读,祝你编程愉快!