Appearance
第12章:模块与包
12.1 模块与包的核心概念
模块和包是Python中用于组织代码的重要概念,它们可以帮助你更好地管理和复用代码。
- 模块:一个
.py文件就是一个模块,包含了变量、函数、类等定义 - 包:包含多个模块的目录,必须包含一个
__init__.py文件
模块和包的作用:
- 代码组织:将相关的代码放在一起,提高代码的可读性和可维护性
- 代码复用:可以在不同的程序中导入和使用模块
- 命名空间隔离:不同模块中的同名变量不会相互干扰
12.2 内置模块
Python提供了许多内置模块,无需安装即可直接使用。以下是一些常用的内置模块:
math模块
math模块提供了数学运算相关的函数。
python
import math
# 求平方根
print(math.sqrt(16)) # 输出:4.0
# 求绝对值
print(math.fabs(-5)) # 输出:5.0
# 求最大值
print(math.fmax(3, 5)) # 输出:5.0
# 求最小值
print(math.fmin(3, 5)) # 输出:3.0
# 三角函数
print(math.sin(math.pi/2)) # 输出:1.0
print(math.cos(0)) # 输出:1.0
# 常数
print(math.pi) # 输出:3.1415926535897693
print(math.e) # 输出:2.718281828459045random模块
random模块用于生成随机数。
python
import random
# 生成0-1之间的随机浮点数
print(random.random()) # 输出:0.123456789...
# 生成指定范围的随机整数
print(random.randint(1, 10)) # 输出:1-10之间的随机整数
# 从序列中随机选择一个元素
fruits = ["apple", "banana", "cherry"]
print(random.choice(fruits)) # 输出:随机选择的水果
# 打乱序列
numbers = [1, 2, 3, 4, 5]
random.shuffle(numbers)
print(numbers) # 输出:打乱后的列表
# 生成指定范围的随机浮点数
print(random.uniform(1, 10)) # 输出:1-10之间的随机浮点数time模块
time模块用于处理时间相关的操作。
python
import time
# 获取当前时间戳
print(time.time()) # 输出:1620000000.123456
# 延迟执行
print("开始")
time.sleep(2) # 延迟2秒
print("结束")
# 时间元组
print(time.localtime()) # 输出:time.struct_time对象
# 格式化时间
print(time.strftime("%Y-%m-%d %H:%M:%S")) # 输出:2023-01-01 12:00:00datetime模块
datetime模块提供了更高级的日期时间处理功能。
python
from datetime import datetime, timedelta
# 获取当前日期时间
now = datetime.now()
print(now) # 输出:2023-01-01 12:00:00.123456
# 格式化日期时间
print(now.strftime("%Y-%m-%d %H:%M:%S")) # 输出:2023-01-01 12:00:00
# 日期时间运算
tomorrow = now + timedelta(days=1)
print(tomorrow) # 输出:明天的日期时间
# 日期时间比较
yesterday = now - timedelta(days=1)
print(now > yesterday) # 输出:True12.3 模块的导入与使用
导入语法
Python提供了多种导入模块的方式:
- 导入整个模块:
import 模块名 - 导入模块中的特定函数/类:
from 模块名 import 函数名/类名 - 导入模块中的所有内容:
from 模块名 import * - 导入模块并指定别名:
import 模块名 as 别名
示例
python
# 导入整个模块
import math
print(math.sqrt(16))
# 导入模块中的特定函数
from math import sqrt, pi
print(sqrt(16))
print(pi)
# 导入模块并指定别名
import math as m
print(m.sqrt(16))
# 导入模块中的所有内容
from math import *
print(sqrt(16))
print(pi)实操:用math模块求平方根
python
import math
# 求平方根
def calculate_square_root():
number = float(input("请输入一个正数:"))
if number < 0:
print("输入错误,必须是正数!")
return
result = math.sqrt(number)
print(f"{number}的平方根是:{result}")
calculate_square_root()实操:用random模块生成随机验证码
python
import random
import string
def generate_verification_code(length=6):
"""生成指定长度的随机验证码"""
# 字符集:大小写字母 + 数字
chars = string.ascii_letters + string.digits
# 随机选择字符
code = ''.join(random.choice(chars) for _ in range(length))
return code
# 生成6位验证码
code = generate_verification_code()
print(f"生成的验证码:{code}")
# 生成8位验证码
code = generate_verification_code(8)
print(f"生成的验证码:{code}")实操:用time模块实现延迟
python
import time
def countdown(seconds):
"""倒计时函数"""
for i in range(seconds, 0, -1):
print(f"倒计时:{i}秒")
time.sleep(1)
print("倒计时结束!")
countdown(5)12.4 第三方模块
第三方模块是由其他开发者创建的模块,需要通过pip安装后才能使用。
安装方法
使用pip install 模块名命令安装第三方模块:
bash
pip install requests
pip install pandas
pip install numpy新手常用第三方模块
- requests:用于发送HTTP请求,是爬虫和API调用的基础
- pandas:用于数据处理和分析
- numpy:用于数值计算
- matplotlib:用于数据可视化
- flask:用于构建Web应用
- django:用于构建大型Web应用
实操:安装requests模块、发送简单网络请求
python
# 首先安装requests模块:pip install requests
import requests
def get_baidu_homepage():
"""获取百度首页内容"""
url = "https://www.baidu.com"
response = requests.get(url)
print(f"状态码:{response.status_code}")
print(f"内容长度:{len(response.text)}")
print(f"前100个字符:{response.text[:100]}...")
get_baidu_homepage()12.5 包的导入与使用
包是包含多个模块的目录,必须包含一个__init__.py文件。
包的结构
my_package/
├── __init__.py
├── module1.py
├── module2.py
└── sub_package/
├── __init__.py
└── module3.py导入包
python
# 导入包中的模块
import my_package.module1
# 导入包中的模块并指定别名
import my_package.module1 as m1
# 从包中导入特定模块
from my_package import module1, module2
# 从包中的模块导入特定函数
from my_package.module1 import function1
# 导入子包中的模块
from my_package.sub_package import module3__init__.py文件
__init__.py文件用于标识一个目录为Python包,它可以为空,也可以包含包级别的初始化代码。
python
# my_package/__init__.py
# 包级别的变量
version = "1.0.0"
# 从模块中导入函数,使它们在包级别可用
from .module1 import function1
from .module2 import function2
# 定义包级别的函数
def package_function():
print("This is a package-level function")新手易错点
模块导入错误:
- 模块未安装:使用pip install安装
- 路径错误:确保模块在Python的搜索路径中
- 循环导入:避免模块之间相互导入
模块别名使用混乱:
- 建议使用简洁明了的别名
- 避免使用与内置函数或变量同名的别名
内置模块与自定义模块重名:
- 自定义模块名不要与Python内置模块同名
- 否则会覆盖内置模块,导致功能异常
通过本章的学习,你已经掌握了Python中模块和包的基本概念和使用方法。模块和包是Python代码组织的重要方式,它们可以帮助你更好地管理和复用代码。在实际编程中,你会大量使用内置模块和第三方模块来扩展Python的功能。
