logo
37

模块

⏱️ 25分钟

模块(Modules):从单文件脚本走向可维护项目

你现在可能会困惑什么

“一个文件也能跑,为什么要拆模块?”

因为项目变大后,单文件会难找、难测、难协作。 模块化是工程化第一步。

一句话定义

模块就是可被导入复用的 .py 文件。

生活类比

像厨房分区:刀具区、调料区、清洗区。 按职责拆分,效率和可维护性都更高。

最小可运行例子

mymath.py

def add(a, b):
    return a + b

PI = 3.14159

main.py

import mymath

print(mymath.add(2, 3))
print(mymath.PI)

常见导入方式

from mymath import add
print(add(10, 20))

import mymath as mm
print(mm.add(1, 2))

拆模块建议

  • 按功能职责拆(如 string_utils.py
  • 一个模块内保持主题聚焦
  • 避免与标准库同名(如 random.py

课堂小测(5 分钟)

  1. 创建 mymath.py 并在 main.py 导入调用。
  2. 新增 sub/mul 函数并验证。
  3. 用别名导入方式再跑一次。

课堂小测参考答案与判分点

  • 参考答案方向:能写出可运行代码,并覆盖题目中的核心条件与边界输入。
  • 判分点 1(正确性):主流程结果正确,关键分支可执行。
  • 判分点 2(可读性):变量命名清晰,结构不过度嵌套。
  • 判分点 3(健壮性):对空值、类型错误或异常输入有基础保护。

迁移任务(课后)

把你的一个 100+ 行脚本拆成“输入模块、处理模块、输出模块”。

本节验收标准

你能独立做到:

  • 创建并导入自定义模块
  • 区分 import xfrom x import y
  • 按职责拆分文件结构

常见报错与调试步骤(新手版)

  • 报错看不懂:先读最后一行错误类型(如 TypeErrorNameError),再回到对应代码行定位。
  • 不确定变量值:在关键位置临时 print(变量, type(变量)),先确认数据是否符合预期。
  • 改了代码却没生效:确认文件已保存、运行的是当前文件、终端环境(venv)是否正确。

常见误区

  • 误区:模块命名与标准库冲突。

  • 正解:会导致导入异常,命名需避开标准库。

  • 误区:大量使用 from x import *

  • 正解:降低可读性并增加命名污染风险。