第 05 节:把一段流程折成函数
本节 objectives:
- 用
def定义函数并调用它- 区分打印结果和返回结果
- 把重复逻辑拆成可测试的小函数
代码能跑,不代表它容易改
当同一段逻辑在三个地方出现,你每改一次都要同步三处。函数把一段流程命名,让你在需要时调用它。Python 用 def 定义函数;函数可以接收参数,也可以用 return 把结果交回调用位置1。
入门时最重要的一刀是:会显示给人的东西用 print(),要继续参与计算的东西用 return。
讲解
函数名回答“这段代码做什么”。 def minutes_to_label(total_minutes): 比一串散落的除法和取余更容易读。名字是给未来的你看的。
参数是函数的输入。 同一个函数用不同参数调用,就能处理不同数据。参数让函数不必依赖外面的固定变量。
返回值连接下一步。 return label 不是显示文字,而是把结果交给调用者。调用者可以打印它、保存它、或传给另一个函数。
小函数更容易自测。 如果一个函数只做一件事,你可以用两三个输入检查它是否可靠。
跟我做一遍(worked example)
把分钟转换逻辑折成函数:
函数内部负责计算和组装字符串。外部负责决定怎么使用结果。这样以后你可以把 format_duration(45) 用在任何地方,不必复制那两行计算。
换你补全(faded example)
补全函数:及格返回 True,否则返回 False。
答案:
关键判断点是:函数返回布尔值,调用者以后可以把它放进别的 if。
小结 + 通向下一节
函数让一段逻辑有了名字和边界。下一节处理函数常常要接收的数据:不止一个值时,该用列表还是字典。
Footnotes
-
Python Tutorial: More Control Flow Tools — https://docs.python.org/3/tutorial/controlflow.html ↩
练习
Level 1: 写一个 greet(name)。
- 做法:函数接收名字,返回
Hello, <name>字符串;在外面打印返回值。
提示 1
先写 return "Hello, " + name。
Level 2: 给任务加标签。
- 做法:写
task_label(title, done),完成时返回[x] title,未完成时返回[ ] title。
提示 2
先判断 done,再组装字符串。
看参考答案
这个函数会在最后的 CLI 项目里复用。