Skip to content

第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.718281828459045

random模块

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:00

datetime模块

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)  # 输出:True

12.3 模块的导入与使用

导入语法

Python提供了多种导入模块的方式:

  1. 导入整个模块import 模块名
  2. 导入模块中的特定函数/类from 模块名 import 函数名/类名
  3. 导入模块中的所有内容from 模块名 import *
  4. 导入模块并指定别名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的功能。

© 2026 编程马·菜鸟教程 版权所有