TheZTHEZ / UNDERSTANDING FIRST
Python 入门入门21 分钟阅读

函数入门:把代码组织起来

使用 def、参数与 return,区分函数定义、调用和输出。

在浏览器中练习 →进度只保存在本机。

学习目标

  • 定义只负责一项计算的函数。
  • 通过参数传入不同数据。
  • 用返回值继续计算,并独立测试。

概念解释

函数把一组操作组织起来,给它一个清晰名字。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. 第 1 行定义函数与两个参数,并没有开始计算面积。
  2. 第 2 行属于函数体,调用时计算乘积并返回。
  3. 第 3 行是空行,只用于分隔。
  4. 第 4 行调用函数,3 与 4 按顺序传给 width 与 height,返回 12 并赋给 area。
  5. 第 5 行显示已经得到的 area。
  6. 第 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、模块与命令行,不代表这些进阶技能已经全部掌握。

换个角度理解

像一张配方:写下配方不等于已经做好菜。调用时给材料,按步骤制作,把成品交回;厨房里的临时便签不是外面的全局标签。

STEP 01定义:保存函数体
STEP 02调用:绑定参数、执行
STEP 03return:返回调用处

函数让一段逻辑可以重用、单独验证和命名。return 交还数据,print 只是显示文字;如果想继续计算,应返回值而不是只打印。

动手观察:一步一步执行

这是当前知识点的独立教学示例,不是本课所有 Python 语法的模拟。修改参数、预测结果,再按下一步验证。完整语言练习使用可信代码运行器。

EXECUTION / 可操作的程序状态

把每一步,看明白

本地受限解释器
参数改变所选示例的数值;执行从头开始。

变量与作用域

输出

每步显示该语句求值后的快照;第 0 步尚未执行。条件行显示判断结果,函数调用单独显示进入与返回。自动播放可随时暂停,默认不会启动。

CHECK YOUR UNDERSTANDING

自己判断,才知道哪里没懂

先选答案再核对。答错会提供原因和补学方向,不影响课程完成进度。

基础 执行 def 时,会立刻运行函数体吗?

应用 没有执行 return 的函数返回什么?

迁移 return 后、同一函数体内的后续语句会执行吗?

尚未提交练习。知识掌握度和学习进度分别记录。

把你卡住的代码或错误交给理解引擎 →

这一节,你理解到哪里了?

这是你的自我反馈,与练习估计、课程进度分别记录。

本文为TheZ原创教学内容。正文采用 CC BY-NC-SA 4.0,代码采用 MIT 许可。请尊重署名与授权范围。