Python for AI

模块 3 - 函数与 Pythonic 写法 · 第 11 课

函数、参数与返回值

把可重复的 AI 数据处理步骤封装成有输入、有输出、易测试的函数。

学习目标

理解 def、参数、返回值和局部变量,并能把一个小型数据转换步骤写成函数。

从重复代码到函数

def mean(values):
    return sum(values) / len(values)

losses = [0.8, 0.6, 0.4]
print(mean(losses))

函数体只有在调用时才执行。return 把结果交给调用者;没有显式 return 的函数返回 None。

参数与契约

参数是函数与调用者之间的契约。函数应明确输入含义,并尽早处理明显的非法输入:

def accuracy(correct, total):
    """返回正确率;total 必须为正数。"""
    if total <= 0:  # Preview:异常处理会在 Module 4 正式讲解
        raise ValueError("total must be positive")
    return correct / total

不要依赖函数外部变量来传递关键数据,这会让测试和复用变困难。

多个返回值与函数组合

def summarize(values):
    return min(values), max(values)

low, high = summarize([0.2, 0.7, 0.4])
print(f"range={low:.1f}..{high:.1f}")

多个返回值实际组成一个 tuple,可以直接解包。函数也可以组合:先用一个函数清洗数据,再把结果传给另一个函数。

AI 场景

训练脚本通常把一个 epoch、指标计算或批次转换写成函数。函数边界让你可以单独打印输入输出,定位问题,而不必运行整个训练流程。

练习

★ 基础

写 clip_score(score, low=0.0, high=1.0),把分数限制在区间内。

★★ 应用

写函数返回列表中的最大值和最小值,并添加一行 docstring。

★★★ 综合

写 summarize_batch(labels),返回包含数量和唯一标签数的字典;组合它和 clip_score,打印一行批次摘要。

一种可能的实现 ```python def clip_score(score, low=0.0, high=1.0): return max(low, min(score, high)) def summarize_batch(labels): return {"count": len(labels), "unique": len(set(labels))} labels = ["cat", "dog", "cat"] scores = [1.2, 0.8, -0.1] summary = summarize_batch(labels) mean_score = clip_score(sum(scores) / len(scores)) print(f"count={summary['count']}, unique={summary['unique']}, mean={mean_score:.2f}") ```

D2L 衔接

D2L 会把训练、评估和数据迭代拆成函数。读代码时先找函数输入输出,就能看出张量和指标怎样流过程序。

第 11 课 学习进度仅保存在当前浏览器。