# 知识库

# 2.3.1 函数定义

函数是把一段完成特定功能的代码封装起来、通过函数名反复调用的程序单元。Python 使用关键字 `def` 定义函数，三个要素是函数名、形式参数列表和函数体。基本形式（语法模板，示意用，其中方括号表示可省略）如下：

```python
def 函数名([形式参数列表]):
    # 函数体
    [return 返回值]
```

方括号表示该部分可以省略。形式参数是定义时声明、用来接收传入数据的变量；函数体必须缩进。`return` 把结果交还给调用者，执行到 `return` 时函数立即终止。

例如，下面定义函数 `add`，它有两个参数 `a` 和 `b`，函数体计算二者之和并返回：

```python
def add(a, b):
    s = a + b
    return s
```

调用 `add(3, 4)` 得到 `7`。调用时程序跳转到函数定义处执行函数体，完成后将结果返回到调用位置。

函数可以没有参数，称为无参函数；定义无参函数时，函数名后面的圆括号也不能省略。函数也可以没有返回值，这时可以不写 `return` 语句。例如：

```python
def sayHello():
    print('Hello, everybody!')
```

Python 函数可以返回多个值，只需将多个值依次写在 `return` 后并用逗号分隔。例如 `getMinMax(alist)` 接收一个列表，同时返回最小值和最大值。一个函数还可包含多个 `return`，用于在不同条件下返回不同结果；执行到 `return` 时函数立即结束，因此它们不会相互干扰。例如 `sort(a, b)` 在 `a >= b` 时返回 `a, b`，否则返回 `b, a`，即按从大到小的顺序返回两个参数。

常见坑：无参函数漏写圆括号会语法错误；误以为多个 `return` 会全部执行；函数体缩进不一致；混淆形参与实参。编写时应先明确“输入（形参）—处理（函数体）—输出（return）”。

## 关键要点
- 用关键字 `def` 定义函数；三要素为函数名、形式参数列表、函数体。
- 基本形式：`def 函数名([形式参数列表]):`，其下为函数体，可选 `[return 返回值]`。
- 无参函数的圆括号不能省略；无返回值时可以不写 `return`。
- 可一次返回多个值，多个值写在 `return` 后并以逗号分隔。
- 一个函数可含多个 `return`；执行到 `return` 时函数立即终止，因此它们不会相互干扰。
- 课程示例：`add(a, b)` 返回两数之和；`sayHello()` 为无参、无返回值；`getMinMax(alist)` 同时返回最小、最大值；`sort(a, b)` 按从大到小返回两个参数。
- 常见坑：漏写圆括号、多个 `return` 误以为会全部执行、缩进不一致、形参与实参混淆。
