汇总咒
到了工匠台更深处,Hoppy 发现自己不再只想拿回一个数字,或者两份分装结果。有时候,它更想让函数直接交回一张小报告卡:总共有多少条印记、里面有多少种不同印记、最后一次印下的是什么。
这节课要练的,就是让函数返回一个更有结构的结果。今天我们用一个很小的 dict 来做这件事,让一次函数调用就能带回一份整洁的汇总报告。
把几条相关信息收成一张小报告
如果调用者后面会同时关心几条带名字的信息,把它们收进一个 dict 往往会更清楚。这样你拿到的就不只是孤零零的数字,而是一份可以按键读取的小报告。
mark_log = ["fern", "fern", "moon"]
def build_summary_report(mark_log):
total_marks = len(mark_log)
unique_marks = len(set(mark_log))
latest_mark = mark_log[-1]
return {
"total_marks": total_marks,
"unique_marks": unique_marks,
"latest_mark": latest_mark,
}
summary_report = build_summary_report(mark_log)
unique_mark_count = summary_report["unique_marks"]
watch_label = "Watch next: " + summary_report["latest_mark"]
print("Summary report:", summary_report)
print("Unique mark count:", unique_mark_count)
print("Watch label:", watch_label)
这份 summary_report 里,三条信息被收在一个有名字的结构里。于是函数外部既可以整体查看它,也可以按 "unique_marks" 或 "latest_mark" 继续做后续处理。
结构化返回值,是给后续步骤准备的
今天真正要建立的直觉是:如果函数做完后,要交回的是几条彼此相关、而且名字也很重要的信息,那么返回一个小字典会比散着放更整洁。你不需要把它想成复杂数据建模,只要把它看成“一张带字段名的小报告卡”就够了。
starter 已经算好了 total_marks、unique_marks 和 latest_mark。把它们收进一个字典,再用 return 交回去。
用 summary_report = build_summary_report(mark_log) 接住整张报告,再从里面读出 summary_report["unique_marks"] 和 summary_report["latest_mark"]。
运行后,你会先看到完整报告,再看到根据其中键值做出的后续结果。这里最重要的不是 dict 的定义,而是你开始知道:函数可以交回一份后续还能继续使用的结构化结果。
当一个小工具要交回几条相关、而且最好带名字的信息时,dict 会很顺手。调用者既能整体拿到这份报告,也能按键读取其中一项继续处理。
参考答案点击展开点击收起
mark_log = ["fern", "moon", "fern", "spark", "moon", "fern"]
def build_summary_report(mark_log):
total_marks = len(mark_log)
unique_marks = len(set(mark_log))
latest_mark = mark_log[-1]
return {
"total_marks": total_marks,
"unique_marks": unique_marks,
"latest_mark": latest_mark,
}
summary_report = build_summary_report(mark_log)
unique_mark_count = summary_report["unique_marks"]
watch_label = "Watch next: " + summary_report["latest_mark"]
print("Summary report:", summary_report)
print("Unique mark count:", unique_mark_count)
print("Watch label:", watch_label)高级技巧想更进一步?点击展开点击收起
这一课没有去讲复杂的嵌套结构,也没有把返回值和文件保存绑在一起。今天只做一件事:让你看到函数可以交回一张整洁的小报告,而这张报告还能继续为后面的代码服务。
带着这种“结构化返回”的感觉继续往后走,会为你之后接触 JSON、CSV 和更真实的数据输出打下很自然的基础。