一、介绍
1.1 定义
函数是可重复调用的代码块,用来实现特定功能。
1.2 语法
def 函数名 (参数 1, 参数 2, ...):
"""函数文档字符串(可选,说明函数功能)"""
# 函数体:实现功能的代码
执行语句
return 返回值 # 可选,没有则默认返回 None
1.3 注意事项
- 参数相关
- 默认参数:禁用列表 / 字典(可变对象),改用 None(内部初始化:
lst = [] if lst is None else lst) - 参数顺序:必选 → 默认 → *args → **kwargs(违反直接报错)
- 可变对象传参:函数内修改会影响外部(传副本
lst.copy()避免)
- 默认参数:禁用列表 / 字典(可变对象),改用 None(内部初始化:
- 作用域相关
- 修改全局变量加
global,修改嵌套变量加nonlocal - 未声明直接赋值全局变量 → 被识别为局部变量(报错)
- 修改全局变量加
- 返回值相关
- 无 return 的函数 → 默认返回 None(别误判有返回值)
- 多返回值本质是元组,解包时数量要匹配(否则报错)
- 递归函数
- 必须写明确终止条件,递归深度≤约 1000 层(否则报 RecursionError)
二、参数与返回值
2.1 参数方式及对比
| 对比维度 | 位置参数 | 默认参数 | 关键字参数 | 可变位置参数 (*args) | 可变关键字参数 (**kwargs) | 解包传参 |
|---|---|---|---|---|---|---|
| 参数数量 | 固定 | 固定 | 固定 | 任意数量 | 任意数量 | 固定(解包后) |
| 参数顺序 | 严格要求 | 需在位置参数后定义 | 调用时可打乱 | 无 | 无 | 解包后需匹配函数定义顺序 |
| 接收数据类型 | 单个值 |


