人工智能day9——模块化编程概念(模块、包、导入)及常见系统模块总结和第三方模块管理
一、概念
(一)模块:
定义:模块是一个包含 Python 定义(函数、类、变量等)和语句的文件,文件名就是模块名加上.py
后缀。
本质:每个 .py
文件就是一个独立的模块,包含函数、类、变量等定义
作用:通过将相关功能代码封装在模块中,实现代码的逻辑分离和复用。比如在多个项目中都可能用到上述的加法和减法函数,就可以将其放在一个模块里,在需要时导入使用
例如:创建一个名为
math_operations.py
的文件,里面定义一些数学运算相关的函数,这个文件就是一个模块。# math_operations.py def add(a, b):return a + bdef subtract(a, b):return a - b
导入模块:
- 语法:
- import 模块名 [as ,模块新名字1] #导入一个模块到当前程序
- from 模块名 import 模块属性名 [as 属性新名] #导入一个模块内部的部分属性到当前程序
- from 模块名 import * #导入一个模块内部的全部属性到当前程序
比如:
import math_operationsprint(math_operations.add(3,5)) #输出8
模块内部属性:
__file__ 绑定模块的路径
__name__ 绑定模块的名称
如果是主模块(首先启动的模块)则绑定 '__main__'
如果不是主模块则 绑定 xxx.py 中的 xxx 这个模块名
(二)包:
定义:包是一种组织模块的方式,本质上是一个包含__init__.py
文件的目录。__init__.py
文件可以为空,也可以包含初始化包时要执行的代码。包可以包含多个模块和子包,用于管理和组织相关模块。
其实本质就是:一个包含 __init__.py
文件的目录,用于将相关模块组织在一起,形成层级结构
作用:当项目规模较大,模块数量较多时,使用包可以更好地对模块进行分层和分类管理,提高代码的可维护性。比如一个大型的 Web 开发项目,可能会将数据库操作相关模块放在一个database
子包中,视图相关模块放在views
子包中
__init__.py
的作用:
- 标识包:告诉 Python 解释器该目录是一个 Python 包。
- 初始化逻辑:导入时执行,可包含包级别的初始化代码。
- 控制导入行为:通过
__all__
变量控制from package import *
的导入内容- 提供包级别的命名空间:
__init__.py
中定义的变量和函数可以在包的模块中共享- 批量导入模块: 可以在
__init__.py
文件中批量导入模块,这些模块可以更方便地使用
导入包:
导入语法总结:
方法1:从包导入模块(也是最常见的)
from package import module # 直接用模块名访问 module.function()
方法2:从模块导入具体内容
from package.module import func, Class # 直接用名称访问 func() obj = Class()
方法3:导入所有公开内容(慎用)
from package.module import * # 导入__all__指定的内容或所有不以下划线开头的内容
方法4:直接导入包/模块
import package.module # 需用全路径访问 package.module.function()
对比包和模块导入的区别:
包的导入的内容是模块,一个个py文件,
模块导入的内容是py文件中定义的各种功能单元,例如:函数、类、方法、属性等等
三、常见的系统模块总结和第三方模块总结
(一)系统模块
常见系统模块:
模块 | 功能 | 官方文档 |
---|---|---|
math | 数学运算 | math --- 数学函数 — Python 3.12.10 文档 |
os | 操作系统接口 | os --- Miscellaneous operating system interfaces — Python 3.13.5 文档 |
os.path | 路径相关 | os.path --- Common pathname manipulations — Python 3.13.5 文档 |
datetime | 日期和时间 | datetime --- Basic date and time types — Python 3.13.5 文档 |
random | 随机数生成 | random --- Generate pseudo-random numbers — Python 3.13.5 文档 |
time | 时间 | time --- Time access and conversions — Python 3.13.5 文档 |
1、math模块:
- 功能概述:提供了各种常用的数学运算函数和常量,可用于数值计算场景,比如三角函数、对数函数、幂运算等常见数学操作,帮助开发者在 Python 中便捷地进行高精度的数学处理,无需自行编写复杂的数学算法实现。
- 常用方法示例:
math.sqrt(x)
:计算x
的平方根,例如math.sqrt(9)
返回3.0
。math.pow(x, y)
:计算x
的y
次幂,像math.pow(2, 3)
结果为8.0
。math.ceil(x)
:向上取整,返回大于或等于x
的最小整数。例如,math.ceil(3.2)
返回4
。math.floor(x)
:向下取整,返回小于或等于x
的最大整数,如math.floor(3.8)
返回3
。math.trunc(x)
:直接截断小数部分,返回整数部分,像math.trunc(3.8)
返回3
。math.fabs(x)
:返回x
的绝对值,如math.fabs(-3)
返回3
。
2、os模块:
1、os.path.join(path, *paths)
:智能拼接路径,自动处理路径分隔符(如/
或\)
path
:基础路径*paths
:可变参数,表示要拼接的多个路径组件- 返回值:拼接后的完整路径
例如:
os.path.join('dir', 'subdir', 'file.txt') # 在 Unix 系统上返回 'dir/subdir/file.txt'
2、os.path.dirname(path)
:返回路径中的目录部分,如os.path.dirname('/home/user/file.txt')
返回/home/user
3、os.path.basename(path)
:返回路径中的文件名部分,如os.path.basename('/home/user/file.txt')
返回file.txt
4、
os.path.exists(path)
:检查路径是否存在(文件或目录),返回布尔值5、
os.mkdir(path)
:创建单个目录,若目录已存在则报错(4和5常常一起使用,先检查路径是否存在,如果不存在则创建一个目录)
if os.path.exists(path) == Falseos.mkdir(path0
6、
os.listdir(path='.')
:返回指定目录下的所有文件和子目录名(列表形式)7、
os.path.isfile(path)
和os.path.isdir(path)
:分别判断指定路径是文件还是目录,在需要区分处理文件和目录的场景下(如文件备份、目录清理等操作)很关键
3、datatime模块:
datetime.datetime.now()
:获取当前的日期和时间,返回一个datetime
对象,例如可以将其赋值给变量后,再通过对象的属性获取年、月、日、时、分、秒等具体时间信息,用于记录操作发生的时间戳datetime.date
:表示日期(年、月、日)。datetime.time
:表示时间(时、分、秒、微秒)。# 当前日期和时间 now = datetime.now() # 返回 datetime 对象 print(f"当前日期时间:{now}") # 输出:2023-10-15 14:30:45.123456
datetime.datetime
:表示日期和时间的组合。# 创建指定日期和时间 dt = datetime(2023, 10, 15, 14, 30, 45) print(f"指定日期时间:{dt}") # 输出:2023-10-15 14:30:45
datetime.timedelta
:表示两个时间点之间的差值
4、random
1. 随机浮点数生成
方法 描述 示例 random.random()
生成 [0.0, 1.0)
范围内的随机浮点数random.random()
→0.7823456789
random.uniform(a, b)
生成 [a, b]
范围内的随机浮点数random.uniform(1, 10)
→5.345678
2. 随机整数生成
方法 描述 示例 random.randint(a, b)
生成 [a, b]
范围内的随机整数(含a
和b
)random.randint(1, 6)
→3
random.randrange(start, stop[, step])
从 range(start, stop, step)
中随机选择一个整数random.randrange(0, 100, 2)
→4
3. 种子控制
方法 描述 示例 random.seed(a=None)
设置随机数生成器的种子,使结果可复现 random.seed(42); random.random()
→ 固定输出0.6394267984578835
5、time模块
time.time()
:返回从 1970 年 1 月 1 日 00:00:00 UTC 到当前时间的时间戳(以秒为单位),常用于计算程序执行时间、记录事件发生的时间点等场景,比如在程序开始和结束处分别调用time.time()
,然后相减就能得到程序的运行时长。time.sleep(seconds)
:让程序暂停执行指定的秒数,常用于模拟耗时操作、控制程序执行频率等,例如在循环中每次执行完一轮操作后,使用time.sleep(1)
暂停 1 秒,避免过于频繁地执行操作,或者在多线程 / 多进程编程中,让不同线程 / 进程按照一定时间间隔交替执行。time.strptime(string[, format])
:将时间字符串按照指定的格式解析为时间元组,与strftime
相反,常用于将外部输入的时间字符串转换为 Python 可处理的时间格式,例如time.strptime('2024-01-01 12:00:00', '%Y-%m-%d %H:%M:%S')
会把给定的时间字符串解析为对应的时间元组结构,方便后续进一步处理。
(二)第三方模块
numpy
模块
功能概述:是 Python 数据科学领域的核心基础库,提供了高效的多维数组对象(ndarray
)以及对这些数组进行各种数学运算、线性代数操作、随机数生成等功能的函数,极大地简化了数值计算相关的代码编写,提升了计算效率,广泛应用于科学计算、数据分析、机器学习等多个领域。
- 常用方法示例:
np.array([data])
:创建一个ndarray
对象,例如np.array([1, 2, 3])
会创建一个一维数组,而np.array([[1, 2], [3, 4]])
则创建一个二维数组,是后续进行各种数值运算的基础数据结构。np.mean(array)
:计算数组的平均值,无论是一维数组还是多维数组都能方便地计算其均值,如arr = np.array([1, 2, 3, 4]); np.mean(arr)
会返回数组元素的平均值,对于多维数组还可以指定维度参数来计算不同维度上的均值。np.dot(a, b)
:用于计算两个数组的点积(对于二维数组来说相当于矩阵乘法),在向量运算、线性回归等机器学习算法的实现中经常用到,例如a = np.array([1, 2]); b = np.array([3, 4]); np.dot(a, b)
会返回两个向量的点积结果。
pandas
模块
功能概述:专门用于数据处理和分析,提供了高性能、易用的数据结构(如 DataFrame
和 Series
),可方便地进行数据读取、清洗、转换、分析以及可视化准备等操作,是数据分析师、数据科学家处理结构化数据的得力工具,大大提高了数据处理的效率和便捷性。
- 常用方法示例:
pd.read_csv('file.csv')
:从 CSV 文件中读取数据并创建一个DataFrame
对象,支持多种格式参数设置,用于适配不同的数据格式和编码等情况,方便导入外部数据进行后续分析,类似的还有read_excel
、read_json
等方法用于读取不同格式的数据文件。df.dropna()
:用于删除含有缺失值(NaN
)的行或列(可通过参数指定),在数据清洗阶段经常用到,确保数据的完整性和准确性,便于后续准确地进行数据分析和建模,例如处理从实际采集的数据中可能存在的部分缺失值情况。df.groupby('列名').sum()
:按照指定的列进行分组,并对其他数值列进行求和操作,这是pandas
强大的数据分组聚合功能体现,常用于按类别统计数据总量、平均值等分析场景,比如按不同地区对销售额数据进行分组求和,查看各地区的销售总额情况。
matplotlib
模块
功能概述:是 Python 中最常用的数据可视化库,能够创建各种类型的图表(如折线图、柱状图、散点图、饼图等),支持对图表的各种元素(标题、坐标轴标签、图例等)进行自定义设置,帮助开发者将数据以直观易懂的图形方式展示出来,便于发现数据规律、进行结果汇报等。
- 常用方法示例:
plt.plot(x, y)
:用于绘制折线图,其中x
和y
分别为横纵坐标的数据序列,例如x = [1, 2, 3]; y = [4, 5, 6]; plt.plot(x, y)
会绘制出一条简单的折线图,展示x
和y
数据之间的关系,常用于展示随时间变化的数据趋势等场景。plt.bar(x, height)
:绘制柱状图,x
表示柱子的位置,height
表示柱子的高度,像展示不同类别数据的数量对比时就可以使用柱状图,例如categories = ['A', 'B', 'C']; values = [10, 20, 15]; plt.bar(categories, values)
会绘制出相应的柱状图直观对比各分类的数据大小。plt.title('图表标题')
、plt.xlabel('x轴标签')
、plt.ylabel('y轴标签')
:分别用于设置图表的标题以及横纵坐标的标签,让图表更具可读性和表意清晰,完善可视化展示效果,使其更易于理解和解读。
requests
模块
功能概述:简化了 HTTP 请求的发送过程,使得 Python 程序能够方便地与网络服务进行交互,支持发送 GET、POST 等多种请求方法,能轻松处理请求的响应内容(如获取 JSON 数据、文本内容等),广泛应用于网络爬虫、调用 API 获取数据等需要与网络资源交互的场景。
- 常用方法示例:
requests.get(url, params=None, headers=None)
:发送 GET 请求到指定的url
,可以通过params
参数传递查询参数(以字典形式),headers
参数设置请求头(模拟浏览器等情况),例如response = requests.get('https://www.example.com/api', params={'key': 'value'}, headers={'User-Agent': 'Mozilla/5.0'})
,常用于获取网页内容、查询公开 API 数据等场景,获取响应后可进一步通过response.text
(获取文本内容)或response.json()
(获取 JSON 格式数据并解析为 Python 对象)等方式处理返回的数据。requests.post(url, data=None, json=None, headers=None)
:发送 POST 请求,data
参数可用于传递表单数据(字典形式),json
参数用于直接传递 JSON 格式的数据,常用于向服务器提交数据的场景,比如向登录接口提交用户名和密码、向数据上传接口发送要保存的数据等。