# 问答库

# 2.3.1 函数定义（问答库）

1. 【单选题·易】Python 中定义函数使用的关键字是（ ）
   A. function
   B. def
   C. func
   D. define
   **答案：B**
   **解析：** 课程明确指出，函数定义的关键字是 `def`。`function`、`func`、`define` 都不是 Python 定义函数的关键字。

2. 【单选题·易】函数定义的三个要素是（ ）
   A. 模块名、包名、库名
   B. 函数名、形式参数列表、函数体
   C. 实参、文件名、异常类型
   D. 类名、对象名、方法名
   **答案：B**
   **解析：** 课程将函数定义的要素概括为函数名、形式参数列表和函数体。模块与包属于后续小节，不是定义函数的三要素。

3. 【判断题·易】定义无参函数时，函数名后面的圆括号可以省略。
   **答案：×**
   **解析：** 函数可以没有参数，称为无参函数；但定义无参函数时，函数名后面的圆括号也不能省略。正确写法如 `def sayHello():`。

4. 【判断题·易】函数也可以没有返回值，这时可以不写 return 语句。
   **答案：√**
   **解析：** 课程明确指出：函数也可以没有返回值，这时可以不写 `return` 语句。例如 `sayHello()` 只负责打印问候语。

5. 【多选题·中】关于下列函数定义，说法正确的有（ ）

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

   A. 函数名为 `add`
   B. 形式参数是 `a` 和 `b`
   C. 调用 `add(3, 4)` 得到 `7`
   D. 该函数没有函数体
   **答案：ABC**
   **解析：** 这是课程中的 `add` 示例：两个参数 `a`、`b`，函数体计算二者之和并 `return`。`add(3, 4)` 的结果为 `7`。D 错误，`s = a + b` 与 `return s` 就是函数体。

6. 【单选题·中】下列哪一项是无参函数的正确定义？
   A. `def sayHello:`
   B. `def sayHello():`
   C. `function sayHello():`
   D. `def sayHello[]:`
   **答案：B**
   **解析：** 无参函数仍须保留圆括号。A 漏写括号，属于语法错误；C 误用其他语言的关键字；D 误用方括号。课程示例为 `def sayHello():`。

7. 【多选题·中】下列关于 `return` 的说法正确的有（ ）
   A. `return` 用于返回函数的结果
   B. 当函数执行到 `return` 语句时，函数会立即终止
   C. 一个函数可以包含多个 `return` 语句
   D. 多个 `return` 会按书写顺序全部执行一遍
   **答案：ABC**
   **解析：** `return` 既返回结果也结束函数执行，因此多个 `return` 用于不同条件分支，不会相互干扰，更不会全部执行。D 与“立即终止”矛盾。

8. 【判断题·中】Python 函数一次只能返回一个值，不能同时返回列表的最小值和最大值。
   **答案：×**
   **解析：** Python 函数可以返回多个值：将多个值依次放在 `return` 后面并以逗号分隔。课程中的 `getMinMax(alist)` 就同时返回最小值和最大值。

9. 【简答题·中】写出 Python 函数定义的基本形式，并说明各部分含义。
   **答案：** 基本形式（语法模板，示意用）为：

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

关键字是 `def`；函数名用于调用；形式参数列表在定义时声明，用来接收传入数据，可以省略（无参函数），但圆括号不能省略；函数体是缩进后的执行语句；`return 返回值` 可选，用于把结果交还给调用者，执行到 `return` 时函数立即结束。
   **解析：** 评分要点：①写出与课程一致的基本形式；②说明 `def`、函数名、形参、函数体、`return` 的含义；③点明无参时圆括号仍不可省、`return` 可省略。只写示例函数而未给一般形式，给部分分。

10. 【单选题·难】运行下列程序，输出结果是什么？

```python
def getMinMax(alist):
    minValue = min(alist)
    maxValue = max(alist)
    return minValue, maxValue

print(getMinMax([3, 1, 4, 1, 5, 9]))
```

    A. `1`
    B. `9`
    C. `(1, 9)`
    D. `[1, 9]`
    **答案：C**
    **解析：** `min` 得到 `1`，`max` 得到 `9`，`return minValue, maxValue` 一次返回两个值，调用结果是元组 `(1, 9)`。`print` 打印元组时带圆括号，元素之间有逗号和空格。A、B 只取了其中一个值；D 误写成列表。

11. 【简答题·难】为什么一个函数可以写多个 `return` 而它们不会相互干扰？请写出课程中按从大到小返回两个参数的 `sort` 函数，并给出调用 `sort(3, 8)` 与 `sort(9, 2)` 的完整可运行程序及输出。
    **答案：** `return` 不仅返回结果，还会立即结束函数。执行到某一个 `return` 后，后续分支中的 `return` 不会再执行，因此多个 `return` 互不干扰。完整程序：

```python
def sort(a, b):
    if a >= b:
        return a, b
    else:
        return b, a

print(sort(3, 8))
print(sort(9, 2))
```

输出为：

```
(8, 3)
(9, 2)
```

`sort(3, 8)` 走 `else` 分支，返回较大的 `8` 再返回 `3`；`sort(9, 2)` 满足 `a >= b`，返回 `9, 2`。
    **解析：** 评分要点：①说明“执行到 return 立即终止”；②代码与课程 `sort` 逻辑一致且可运行；③两次调用结果分别为 `(8, 3)` 和 `(9, 2)`，顺序为从大到小。写成从小到大或漏写 `else` 分支，不得满分。

12. 【单选题·难】运行下列程序，输出结果是什么？

```python
def add(a, b):
    s = a + b
    return s
    print('不会执行')

print(add(3, 4))
```

    A. `7` 和 `不会执行` 两行
    B. `7`
    C. `不会执行`
    D. 因 `return` 后面还有语句而报错
    **答案：B**
    **解析：** `add(3, 4)` 中 `s` 为 `7`，执行 `return s` 后函数立即终止，其后的 `print('不会执行')` 不会运行，也不构成语法错误。外层 `print` 打印返回值 `7`。A 误以为 `return` 之后的语句仍会执行。
