模块与包
了解 import 机制、__name__、标准库组织、相对导入
模块与包
当你写的代码越来越多,需要把它们拆分到不同文件中。Python 的模块和包系统让你轻松组织代码。
学完本章你将掌握: import 的各种姿势、标准库概览、自定义模块、pip 安装第三方包。
一、什么是模块
一个 .py 文件就是一个模块。比如 math、random、os 都是 Python 自带的标准库模块:
python
import math
print(math.sqrt(16)) # 4.0
print(math.pi) # 3.141592653589793
print(math.factorial(5)) # 120
二、import 的四种写法
python
# 方式1:导入整个模块(最清晰)
import math
print(math.sqrt(16))
# 方式2:导入特定函数
from math import sqrt, pi
print(sqrt(16), pi)
# 方式3:导入全部(不推荐,会污染命名空间)
from math import *
# 方式4:用别名
import numpy as np
import pandas as pd
💡 推荐方式1:
import math后写math.sqrt(),一目了然是哪个模块的函数。from math import *会让代码难以追踪。
三、常用标准库
python
# random — 随机数
import random
print(random.randint(1, 100)) # 随机整数
print(random.choice(["A","B"])) # 随机选择
# datetime — 日期时间
from datetime import datetime, timedelta
now = datetime.now()
print(now.strftime("%Y-%m-%d %H:%M"))
# json — JSON 处理
import json
data = {"name": "小明", "age": 20}
print(json.dumps(data, ensure_ascii=False))
# os — 操作系统接口
import os
print(os.getcwd()) # 当前工作目录
print(os.path.exists("file.txt")) # 文件是否存在
# sys — 系统相关
import sys
print(sys.version) # Python 版本
print(sys.argv) # 命令行参数
# collections — 高级容器
from collections import Counter
words = Counter(["a","b","a","c","a","b"])
print(words) # Counter({'a': 3, 'b': 2, 'c': 1})
四、创建自定义模块
假设你在项目中有两个文件:
python
# utils.py —— 工具函数模块
def add(a, b):
return a + b
def multiply(a, b):
return a * b
PI = 3.14159
def _private_helper():
"""下划线开头表示"私有"(约定)"""
return "内部使用"
python
# main.py —— 主程序
import utils
print(utils.add(3, 5)) # 8
print(utils.PI) # 3.14159
五、if __name__ == "__main__"
一个常见的 Python 惯用法:
python
# calculator.py
def add(a, b):
return a + b
def subtract(a, b):
return a - b
if __name__ == "__main__":
# 这段代码只在直接运行 calculator.py 时执行
# 当被其他文件 import 时不执行
print("测试 add:", add(10, 5))
print("测试 subtract:", subtract(10, 5))
💡 为什么需要这个:当你
import calculator时,不希望自动运行测试代码。__name__ == "__main__"只有在直接执行时才为 True。
六、包 (Package)
包是一个包含多个模块的文件夹,必须有一个 __init__.py 文件:
mypackage/
├── __init__.py # 表明这是一个包
├── core.py # 核心功能
├── utils.py # 工具函数
└── sub/
├── __init__.py
└── helper.py # 子模块
python
# 导入包中的模块
from mypackage import core, utils
from mypackage.sub import helper
七、pip——安装第三方包
bash
# 安装包
pip install requests
pip install numpy pandas matplotlib # 一次装多个
# 查看已安装
pip list
# 卸载
pip uninstall requests
# 安装特定版本
pip install django==4.2
常用第三方包推荐:
| 包名 | 用途 | pip 命令 |
|---|---|---|
| `requests` | HTTP 请求 | `pip install requests` |
| `numpy` | 科学计算 | `pip install numpy` |
| `pandas` | 数据分析 | `pip install pandas` |
| `flask` | Web 框架 | `pip install flask` |
| `pillow` | 图片处理 | `pip install pillow` |
八、虚拟环境
不同项目可能需要不同版本的包,虚拟环境让它们隔离:
bash
# 创建虚拟环境
python -m venv myenv
# 激活(Windows)
myenv\Scripts\activate
# 激活(macOS/Linux)
source myenv/bin/activate
# 退出
deactivate
小结
import导入模块,.py文件即模块- 包 = 文件夹 +
__init__.py pip install安装第三方包if __name__ == "__main__"区分导入和直接运行- 虚拟环境隔离项目依赖
小练习
- 创建一个
mymath.py模块,包含square()和cube()两个函数 - 在主程序中导入并使用这个模块
- 试试
pip list查看当前安装了哪些包
💬 下一章预告:学完模块,下一章学习文件操作——读写磁盘文件。