Python · Day 25

模块、import
与代码拆分

第二十五天开始学习模块。先调用 Python 自带的数学工具,再创建自己的 study_tools,把成绩计算从主程序中拆出去,让不同文件各自负责一部分工作。

第一次导入标准库

import 可以把其他模块提供的工具引入当前程序。导入完整的 math 模块后,需要通过“模块名.函数名”调用其中的平方根函数。

day25.py
import math                                  # 导入完整的数学工具模块
number = 81                                # 保存准备计算平方根的数字
answer = math.sqrt(number)                   # 通过模块名调用平方根函数
print("计算结果:", answer)                 # 输出浮点数 9.0

两种导入方式

import math 导入整个模块,调用时写 math.sqrt()from math import sqrt 只导入指定函数,调用时可以直接写 sqrt()。后者更短,但没有导入的名字不能直接使用。

import mathmath.sqrt(81) · from math import sqrtsqrt(100)

创建自己的工具模块

普通的 .py 文件也可以成为模块。把等级判断函数放进 study_tools.py,主程序只要导入它,就能把成绩交给模块处理。

study_tools.py
def get_level(score):                    # 定义根据成绩返回等级的工具函数
    if score >= 90:                       # 先判断优秀区间
        return "优秀"                    # 返回优秀并结束函数
    elif score >= 80:                     # 再判断良好区间
        return "良好"                    # 返回良好
    elif score >= 60:                     # 判断及格区间
        return "及格"                    # 返回及格
    else:                                   # 处理低于六十分的情况
        return "不及格"                  # 返回不及格

导入模块时会发生什么

导入文件时,函数定义本身会被加载,但函数体不会自动运行;写在函数外的普通语句则会立刻执行。因此,模块里的演示和测试代码通常放进主入口判断中。

study_tools.py
if __name__ == "__main__":                 # 判断当前文件是否被直接运行
    test_result = get_level(85)              # 直接运行时才执行模块测试
    print("模块测试结果:", test_result)       # 被其他文件导入时不会输出

综合练习:把计算交给模块

最后在工具模块中准备 calculate_average()get_level(),主程序负责收集三次成绩,再把列表和平均分交给模块计算。

day25.py
from study_tools import calculate_average, get_level # 导入两个工具函数
scores = []                                             # 创建保存三次成绩的空列表

while len(scores) < 3:                              # 列表不足三项时继续输入
    score = int(input("请输入成绩:"))                  # 获取一项整数成绩
    scores.append(score)                               # 把成绩加入列表

average = calculate_average(scores)                    # 把列表交给模块计算平均分
level = get_level(average)                             # 把平均分交给模块判断等级

实际输入 [95, 85, 90] 后,模块返回平均分 90.0,成绩等级为“优秀”。

今天真正掌握的内容

  • 知道普通的 .py 文件也能被导入为模块
  • 能区分导入整个模块和只导入指定函数
  • 理解模块顶层代码会在首次导入时执行
  • 会使用 if __name__ == "__main__": 保护模块测试代码
  • 能让主程序负责输入输出,让工具模块负责计算

今天最大的变化不是程序多了一个文件,而是开始按职责思考:输入、计算和测试可以放在合适的位置,再通过 import 连接起来。