学习目标
- 定义只负责一项计算的函数。
- 通过参数传入不同数据。
- 用返回值继续计算,并独立测试。
概念解释
函数把一组操作组织起来,给它一个清晰名字。def 后跟函数名、括号中的参数与冒号,缩进部分是函数体。定义函数不会立即执行函数体;写 rectangle_area(3, 4) 才会调用它,调用时 width、height 分别收到 3、4。
参数是函数接收输入的名称,返回值是函数交回调用者的结果。return 表示结束本次函数执行并返回结果;print 只是显示信息。函数内部只 print 而没有 return,调用者通常得到 None,无法把显示过的数字当作返回值继续算。
函数内部定义的普通局部名称只在该调用中使用。不要依赖函数外部偷偷变化的值来完成基础计算;将需要的数据明确写成参数,更容易理解和测试。先让函数负责一件事,使用三组输入检验,再考虑复用和扩展。
完整代码示例
将下面代码完整复制到运行器,先运行原例,再一次只修改一个地方。
def rectangle_area(width, height):
return width * height
area = rectangle_area(3, 4)
print(area)
print(rectangle_area(5, 2))
逐行代码讲解
- 第 1 行定义函数与两个参数,并没有开始计算面积。
- 第 2 行属于函数体,调用时计算乘积并返回。
- 第 3 行是空行,只用于分隔。
- 第 4 行调用函数,3 与 4 按顺序传给 width 与 height,返回 12 并赋给 area。
- 第 5 行显示已经得到的 area。
- 第 6 行使用另一组参数再次调用,得到 10。两次调用互相独立。
实际运行结果
以下输出已在 Python 3 中执行核对。代码和输出分别放在不同区域;不要把输出当作代码。
12
10
常见错误
- 遗漏 return,函数结果为 None;显示正确不等于返回正确。
- 函数需要两个参数却只传一个,产生 TypeError,检查调用签名。
- 把调用写在定义之前,当前文件中名称尚不存在,会产生 NameError。
实践练习
定义 is_even(number),返回数字是否为偶数的布尔值,不要在函数内部打印。检查输入 2、3、0。再用 print 显示函数结果。
先独立作答再查看参考。能运行还不够,请解释结果为什么正确。
参考答案
def is_even(number):
return number % 2 == 0
print(is_even(2))
print(is_even(3))
print(is_even(0))
assert is_even(2) is True
assert is_even(3) is False
assert is_even(0) is True
输出 True、False、True。完成十节后,可进入任务管理器项目;项目会额外讲解字典、JSON、模块与命令行,不代表这些进阶技能已经全部掌握。
换个角度理解
像一张配方:写下配方不等于已经做好菜。调用时给材料,按步骤制作,把成品交回;厨房里的临时便签不是外面的全局标签。
函数让一段逻辑可以重用、单独验证和命名。return 交还数据,print 只是显示文字;如果想继续计算,应返回值而不是只打印。
动手观察:一步一步执行
这是当前知识点的独立教学示例,不是本课所有 Python 语法的模拟。修改参数、预测结果,再按下一步验证。完整语言练习使用可信代码运行器。
把每一步,看明白
变量与作用域
输出
每步显示该语句求值后的快照;第 0 步尚未执行。条件行显示判断结果,函数调用单独显示进入与返回。自动播放可随时暂停,默认不会启动。
自己判断,才知道哪里没懂
先选答案再核对。答错会提供原因和补学方向,不影响课程完成进度。
尚未提交练习。知识掌握度和学习进度分别记录。
这一节,你理解到哪里了?
这是你的自我反馈,与练习估计、课程进度分别记录。