Z
ZHANK
函数与模块

模块与包

了解 import 机制、__name__、标准库组织、相对导入

模块与包

当你写的代码越来越多,需要把它们拆分到不同文件中。Python 的模块和包系统让你轻松组织代码。

学完本章你将掌握: import 的各种姿势、标准库概览、自定义模块、pip 安装第三方包。


一、什么是模块

一个 .py 文件就是一个模块。比如 mathrandomos 都是 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

💡 推荐方式1import 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

小结

  1. import 导入模块,.py 文件即模块
  2. 包 = 文件夹 + __init__.py
  3. pip install 安装第三方包
  4. if __name__ == "__main__" 区分导入和直接运行
  5. 虚拟环境隔离项目依赖

小练习

  1. 创建一个 mymath.py 模块,包含 square()cube() 两个函数
  2. 在主程序中导入并使用这个模块
  3. 试试 pip list 查看当前安装了哪些包

💬 下一章预告:学完模块,下一章学习文件操作——读写磁盘文件。