【Python学习】Python模块
目录
前言
在Python编程中,模块(Module)是组织代码的核心方式,它能将功能相近的代码封装成独立文件,实现代码复用、简化开发、便于维护。无论是Python内置的标准模块,还是第三方模块、自定义模块,都是Python开发中不可或缺的部分。本教程将从模块的基础概念出发,逐步讲解模块的导入、使用、自定义,以及常用内置模块和第三方模块的实战用法,适合Python入门及进阶学习者参考。
学习目标:掌握模块的核心概念与导入方式;熟练使用常用内置模块;能够独立编写自定义模块;学会安装和使用第三方模块,解决实际开发问题。

第一章:Python模块基础认知
1.1 什么是Python模块
Python模块本质上是一个以.py为后缀的Python文件,文件中包含了Python变量、函数、类、语句等代码。简单来说,模块就是一个“代码工具箱”,里面封装了特定的功能,我们可以在其他Python文件中导入这个“工具箱”,直接使用里面的功能,无需重复编写代码。
例如:Python自带的math模块,就是一个封装了数学运算功能的文件,里面包含了求平方根、三角函数、常数π等功能,我们无需自己编写这些复杂的运算代码,导入后即可直接使用。
1.2 模块的核心作用
-
代码复用:将常用功能封装成模块,在多个项目、多个文件中重复使用,避免重复编码,提高开发效率。
-
代码模块化:将一个复杂的项目拆分成多个模块,每个模块负责一个特定的功能,使代码结构更清晰,便于后期维护和调试。
-
命名空间隔离:不同模块中的变量、函数、类名称可以重复,不会相互冲突(通过“模块名.功能名”的方式调用,避免命名污染)。
1.3 模块的分类
Python模块主要分为三大类,覆盖了开发中的大部分场景:
-
内置模块(标准库):Python安装完成后自带的模块,无需额外安装,直接导入即可使用,如
math、sys、os、datetime等,是Python开发的基础工具。 -
自定义模块:开发者根据自身需求编写的
.py文件,封装项目中常用的功能,供项目内部或其他项目使用。 -
第三方模块:其他开发者或组织开发的、供公众使用的模块,需要通过包管理工具(如pip)安装后才能使用,如
requests(网络请求)、numpy(数据处理)、pandas(数据分析)等。
第二章:模块的导入与使用
导入模块是使用模块功能的前提,Python提供了多种导入方式,适用于不同的使用场景,核心原则是“按需导入”,避免导入不必要的功能,节省内存。
2.1 基本导入方式(import 语句)
2.1.1 导入整个模块
语法:import 模块名
使用方式:模块名.函数名()、模块名.变量名、模块名.类名()
示例:导入内置math模块,使用其求平方根和π常数的功能
# 导入整个math模块
import math
# 使用math模块中的sqrt()函数(求平方根)
result = math.sqrt(16)
print("16的平方根是:", result) # 输出:16的平方根是:4.0
# 使用math模块中的pi变量(圆周率)
print("圆周率π的值是:", math.pi) # 输出:圆周率π的值是:3.141592653589793
2.1.2 给模块起别名(简化调用)
当模块名较长时,可以给模块起一个简短的别名,方便后续调用,语法:import 模块名 as 别名
示例:给numpy模块(第三方模块)起别名np(行业通用写法)
# 导入numpy模块并起别名np
import numpy as np
# 使用别名调用模块功能
arr = np.array([1, 2, 3, 4]) # 创建数组
print("数组内容:", arr) # 输出:数组内容:[1 2 3 4]
2.2 导入模块中的特定功能
如果只需要使用模块中的某个或某几个功能,无需导入整个模块,可以直接导入指定功能,减少内存占用。
2.2.1 导入单个功能
语法:from 模块名 import 功能名
使用方式:直接使用功能名(),无需加模块名前缀
示例:从math模块中导入pow()函数(求幂)
# 只导入math模块中的pow函数
from math import pow
# 直接使用pow函数,无需加math.前缀
result = pow(2, 3) # 2的3次方
print("2的3次方是:", result) # 输出:2的3次方是:8.0
2.2.2 导入多个功能
语法:from 模块名 import 功能名1, 功能名2, 功能名3
示例:从datetime模块中导入date类和datetime类
# 从datetime模块导入多个功能
from datetime import date, datetime
# 使用date类获取当前日期
today = date.today()
print("今天的日期:", today) # 输出:今天的日期:2026-04-03
# 使用datetime类获取当前时间
now = datetime.now()
print("当前时间:", now) # 输出:当前时间:2026-04-03 10:00:00(具体时间随实际情况变化)
2.2.3 导入模块中的所有功能(不推荐)
语法:from 模块名 import *
这种方式会导入模块中的所有功能,使用时无需加前缀,但存在两个问题:一是可能导入不必要的功能,占用内存;二是容易出现命名冲突(如果当前文件中的变量/函数名与模块中的功能名重复)。
示例(不推荐使用):
# 导入math模块的所有功能(不推荐)
from math import *
print(sqrt(25)) # 直接使用sqrt函数,无需加前缀,输出:5.0
print(pi) # 直接使用pi变量,输出:3.141592653589793
2.3 导入自定义模块的注意事项
自定义模块的导入,核心是确保Python解释器能找到该模块文件,常见场景及注意事项如下:
-
如果自定义模块与当前运行的Python文件在同一目录下,直接使用
import 模块名即可导入。 -
如果自定义模块在其他目录下,需要先将模块所在目录添加到Python的搜索路径(sys.path)中,再导入模块。
示例:导入其他目录下的自定义模块
# 导入sys模块,用于修改Python搜索路径
import sys
# 将自定义模块所在的目录添加到搜索路径中(替换为你的模块目录路径)
sys.path.append("D:/PythonProjects/modules")
# 导入自定义模块(假设模块名为my_module.py)
import my_module
# 使用自定义模块中的功能
my_module.my_function() # 调用模块中的my_function函数
第三章:常用内置模块实战
Python内置模块(标准库)涵盖了日常开发中最常用的功能,无需额外安装,下面重点讲解几个高频使用的内置模块,结合实例说明其核心用法。
3.1 math模块(数学运算)
math模块提供了大量的数学运算函数和常数,适用于基础数学计算、科学计算等场景,核心功能如下:
|
功能 |
函数/变量 |
说明 |
示例 |
|---|---|---|---|
|
常数 |
math.pi |
圆周率π(约3.14159) |
print(math.pi) → 3.141592653589793 |
|
平方根 |
math.sqrt(x) |
求x的平方根(x≥0) |
math.sqrt(36) → 6.0 |
|
求幂 |
math.pow(x, y) |
求x的y次方(返回浮点数) |
math.pow(3, 2) → 9.0 |
|
三角函数 |
math.sin(x)、math.cos(x) |
x为弧度,求正弦、余弦值 |
math.sin(math.pi/2) → 1.0 |
|
取整 |
math.ceil(x)、math.floor(x) |
ceil向上取整,floor向下取整 |
math.ceil(2.1)→3,math.floor(2.9)→2 |
3.2 os模块(系统操作)
os模块用于与操作系统交互,实现文件、目录的创建、删除、查询等操作,是文件处理类项目的核心模块,核心功能如下:
3.2.1 目录相关操作
import os
# 1. 获取当前工作目录(当前Python文件运行的目录)
current_dir = os.getcwd()
print("当前工作目录:", current_dir)
# 2. 切换工作目录
os.chdir("D:/PythonProjects") # 切换到指定目录
print("切换后的工作目录:", os.getcwd())
# 3. 创建目录(单个目录)
os.mkdir("test_dir") # 在当前工作目录下创建test_dir目录
# 4. 创建多级目录(递归创建)
os.makedirs("a/b/c") # 创建a目录,再在a下创建b,b下创建c
# 5. 删除目录(只能删除空目录)
os.rmdir("test_dir") # 删除空的test_dir目录
# 6. 删除多级目录(递归删除,谨慎使用!)
os.removedirs("a/b/c") # 依次删除c、b、a目录(需确保目录为空)
# 7. 列出目录下的所有文件和目录
file_list = os.listdir("D:/PythonProjects")
print("目录下的内容:", file_list)
3.2.2 文件相关操作
import os
# 1. 判断文件/目录是否存在
print(os.path.exists("test.txt")) # 判断test.txt文件是否存在,返回True/False
print(os.path.exists("test_dir")) # 判断test_dir目录是否存在
# 2. 判断是否是文件/目录
print(os.path.isfile("test.txt")) # 判断是否是文件
print(os.path.isdir("test_dir")) # 判断是否是目录
# 3. 获取文件/目录的绝对路径
abs_path = os.path.abspath("test.txt")
print("文件绝对路径:", abs_path)
# 4. 重命名文件/目录
os.rename("old.txt", "new.txt") # 将old.txt重命名为new.txt
# 5. 删除文件(谨慎使用!删除后无法恢复)
os.remove("new.txt") # 删除new.txt文件
3.3 datetime模块(时间处理)
datetime模块用于处理日期和时间,提供了日期、时间的创建、格式化、计算等功能,解决了Python原生时间处理的繁琐问题,核心功能如下:
3.3.1 获取当前日期和时间
from datetime import date, datetime, timedelta
# 1. 获取当前日期(年-月-日)
today = date.today()
print("当前日期:", today) # 输出:2026-04-03
print("年:", today.year) # 输出:2026
print("月:", today.month) # 输出:4
print("日:", today.day) # 输出:3
# 2. 获取当前时间(年-月-日 时:分:秒.微秒)
now = datetime.now()
print("当前时间:", now) # 输出:2026-04-03 10:30:00.123456
# 3. 获取当前时间戳(从1970-01-01 00:00:00到当前时间的秒数)
timestamp = now.timestamp()
print("当前时间戳:", timestamp)
3.3.2 日期时间的格式化(重点)
使用strftime()方法将日期时间对象转换为指定格式的字符串,常用格式化符号如下:
-
%Y:4位年份(如2026)
-
%m:2位月份(如04)
-
%d:2位日期(如03)
-
%H:24小时制小时(如14)
-
%M:2位分钟(如30)
-
%S:2位秒数(如59)
from datetime import datetime
now = datetime.now()
# 格式化为:年-月-日 时:分:秒
format1 = now.strftime("%Y-%m-%d %H:%M:%S")
print("格式化时间1:", format1) # 输出:2026-04-03 10:35:20
# 格式化为:月/日/年 小时:分钟(12小时制)
format2 = now.strftime("%m/%d/%Y %I:%M")
print("格式化时间2:", format2) # 输出:04/03/2026 10:35
3.3.3 日期时间的计算
使用timedelta类实现日期时间的加减(如计算几天前、几天后的日期):
from datetime import date, timedelta
today = date.today()
# 1. 计算3天后的日期
three_days_later = today + timedelta(days=3)
print("3天后的日期:", three_days_later)
# 2. 计算1周前的日期
one_week_ago = today - timedelta(weeks=1)
print("1周前的日期:", one_week_ago)
# 3. 计算2小时后的时间
from datetime import datetime
now = datetime.now()
two_hours_later = now + timedelta(hours=2)
print("2小时后的时间:", two_hours_later)
3.4 sys模块(Python解释器交互)
sys模块用于与Python解释器交互,获取解释器的相关信息、控制程序的运行等,核心功能如下:
import sys
# 1. 获取Python解释器的版本信息
print("Python版本:", sys.version)
# 2. 获取Python的搜索路径(模块查找路径)
print("Python搜索路径:", sys.path)
# 3. 获取命令行参数(运行Python文件时传入的参数)
# 运行命令:python test.py arg1 arg2
print("命令行参数:", sys.argv) # 输出:['test.py', 'arg1', 'arg2']
# 4. 退出程序(sys.exit(code),code=0表示正常退出,非0表示异常退出)
# sys.exit(0) # 正常退出程序
第四章:自定义模块实战
当内置模块和第三方模块无法满足需求时,我们可以编写自定义模块,将项目中常用的功能封装起来,提高代码复用性和可维护性。下面通过一个完整案例,讲解自定义模块的创建、导入和使用。
4.1 自定义模块的创建
步骤:1. 新建一个.py文件,作为自定义模块;2. 在文件中编写变量、函数、类等代码;3. 保存文件(模块名尽量简洁,符合Python命名规范,避免与内置模块重名)。
示例:创建一个名为my_utils.py的自定义模块,封装常用的工具函数(字符串处理、数值计算)
# my_utils.py(自定义模块)
# 1. 定义变量
MODULE_NAME = "my_utils"
VERSION = "1.0.0"
# 2. 定义函数:判断字符串是否为空
def is_empty(s):
"""判断字符串是否为空(空格、制表符也视为空)"""
return len(s.strip()) == 0
# 3. 定义函数:计算两个数的平均值
def average(a, b):
"""计算两个数的平均值,返回浮点数"""
if not (isinstance(a, (int, float)) and isinstance(b, (int, float))):
raise TypeError("输入必须是整数或浮点数")
return (a + b) / 2
# 4. 定义类:简单的计算器类
class Calculator:
"""简单计算器类,实现加减乘除功能"""
def add(self, a, b):
return a + b
def subtract(self, a, b):
return a - b
def multiply(self, a, b):
return a * b
def divide(self, a, b):
if b == 0:
raise ZeroDivisionError("除数不能为0")
return a / b
# 模块测试代码(仅在直接运行该模块时执行,导入时不执行)
if __name__ == "__main__":
print("测试is_empty函数:", is_empty(" ")) # 输出:True
print("测试average函数:", average(3, 5)) # 输出:4.0
calc = Calculator()
print("测试加法:", calc.add(2, 3)) # 输出:5
说明:if __name__ == "__main__": 用于模块自测,当直接运行该模块时,该代码块会执行;当该模块被导入到其他文件时,该代码块不会执行,避免自测代码干扰其他文件。
4.2 自定义模块的导入与使用
假设my_utils.py与当前运行的test.py文件在同一目录下,导入并使用该模块:
# test.py(导入自定义模块)
# 1. 导入整个自定义模块
import my_utils
# 使用模块中的变量
print("模块名称:", my_utils.MODULE_NAME)
print("模块版本:", my_utils.VERSION)
# 使用模块中的函数
print("判断空字符串:", my_utils.is_empty("hello")) # 输出:False
print("计算平均值:", my_utils.average(4, 6)) # 输出:5.0
# 使用模块中的类
calc = my_utils.Calculator()
print("减法:", calc.subtract(10, 3)) # 输出:7
print("除法:", calc.divide(8, 2)) # 输出:4.0
# 2. 导入模块中的特定功能
from my_utils import is_empty, Calculator
print("判断空字符串:", is_empty("")) # 输出:True
calc2 = Calculator()
print("乘法:", calc2.multiply(3, 4)) # 输出:12
4.3 自定义模块的进阶:包(Package)
当自定义模块数量较多时,需要用“包(Package)”来组织模块,包是一个包含__init__.py文件的目录,目录下可以存放多个模块文件,实现模块的分层管理。
4.3.1 包的创建步骤
-
新建一个目录(包名,符合Python命名规范),如
my_package; -
在该目录下新建一个
__init__.py文件(空文件即可,用于标识该目录是一个Python包); -
将多个自定义模块(
.py文件)放入该目录下,如str_utils.py(字符串工具)、num_utils.py(数值工具)。
包的结构如下:
my_package/ ├── __init__.py ├── str_utils.py # 字符串工具模块 └── num_utils.py # 数值工具模块
4.3.2 包的导入方式
# 1. 导入包中的某个模块
from my_package import str_utils
# 使用模块中的功能
print(str_utils.is_empty("test")) # 假设str_utils.py中有is_empty函数
# 2. 导入包中模块的特定功能
from my_package.num_utils import average
print(average(5, 7)) # 假设num_utils.py中有average函数
# 3. 给包/模块起别名
from my_package import str_utils as su
print(su.is_empty("")) # 输出:True
第五章:第三方模块的安装与使用
第三方模块是Python生态的重要组成部分,覆盖了网络请求、数据分析、可视化、Web开发等多个领域,安装第三方模块的核心工具是pip(Python自带的包管理工具)。
5.1 pip工具的基础使用
pip的使用的通过命令行(CMD、Terminal)执行,核心命令如下:
-
查看pip版本:
pip --version -
安装第三方模块:
pip install 模块名(如pip install requests) -
安装指定版本的模块:
pip install 模块名==版本号(如pip install requests==2.31.0) -
升级模块:
pip install --upgrade 模块名 -
卸载模块:
pip uninstall 模块名 -
查看已安装的模块:
pip list
注意:如果系统中安装了多个Python版本,需区分pip(对应默认Python)和pip3(对应Python3)。
5.2 高频第三方模块实战
5.2.1 requests模块(网络请求)
requests模块用于发送HTTP请求(GET、POST等),实现爬虫、调用API等功能,是最常用的第三方模块之一。
步骤1:安装requests模块
pip install requests
步骤2:使用requests发送GET请求(获取网页内容)
import requests
# 发送GET请求,获取百度首页内容
response = requests.get("https://www.baidu.com")
# 设置编码格式,避免中文乱码
response.encoding = "utf-8"
# 打印网页内容(HTML)
print("网页状态码:", response.status_code) # 200表示请求成功
print("网页内容:", response.text[:500]) # 打印前500个字符
5.2.2 pandas模块(数据分析)
pandas模块用于数据处理和分析,支持读取CSV、Excel等文件,实现数据筛选、排序、统计等功能,是数据分析领域的核心工具。
步骤1:安装pandas模块(依赖numpy,会自动安装)
pip install pandas
步骤2:使用pandas读取CSV文件并简单分析
import pandas as pd
# 读取CSV文件(替换为你的CSV文件路径)
df = pd.read_csv("data.csv")
# 查看数据的前5行
print("数据前5行:")
print(df.head())
# 查看数据的基本信息(列名、数据类型、缺失值等)
print("\n数据基本信息:")
print(df.info())
# 查看数据的统计描述(均值、标准差、最大值等)
print("\n数据统计描述:")
print(df.describe())
# 筛选数据(例如筛选年龄大于18的数据)
filtered_df = df[df["age"] > 18]
print("\n年龄大于18的数据:")
print(filtered_df)
第六章:模块学习总结与拓展
6.1 核心知识点总结
-
模块是
.py文件,用于封装功能,实现代码复用和模块化; -
模块分为内置模块、自定义模块、第三方模块,导入方式有
import和from...import两种; -
常用内置模块:math(数学)、os(系统)、datetime(时间)、sys(解释器交互);
-
自定义模块需注意文件路径,包是模块的分层管理方式,需包含
__init__.py文件; -
第三方模块通过pip安装,核心高频模块有requests、pandas、numpy等。
6.2 学习拓展建议
-
深入学习内置模块:查看Python官方文档(Python标准库文档),了解更多内置模块的功能;
-
实战练习:结合实际需求,编写自定义模块,如日志模块、数据处理模块;
-
探索第三方模块:根据开发需求,学习常用第三方模块,如可视化模块matplotlib、Web框架flask等;
-
规范编写模块:遵循Python命名规范,给模块、函数、类添加注释,提高代码可读性和可维护性。
6.3 常见问题解决
-
模块导入失败:检查模块文件路径是否正确,是否添加到Python搜索路径(sys.path);
-
第三方模块安装失败:检查pip版本,更换镜像源(如阿里云、清华镜像),命令:
pip install 模块名 -i https://mirrors.aliyun.com/pypi/simple/; -
命名冲突:避免自定义模块名与内置模块、第三方模块重名,导入时使用别名区分。
更多推荐


所有评论(0)