模块、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 math → math.sqrt(81) · from math import sqrt → sqrt(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 连接起来。