函数的本质
函数是可重复调用的代码块,用来封装特定功能。在 Python 中,函数是对象,可以赋值给变量、作为参数传递,甚至返回其他函数。
基本语法结构
def 函数名 (参数 1, 参数 2, ...):
"""函数文档字符串(可选,说明函数功能)"""
# 函数体:实现功能的代码
执行语句
return 返回值 # 可选,没有则默认返回 None
编写时注意缩进规范,这是 Python 语法的基石。文档字符串虽非必须,但建议保留,方便后续维护或生成文档。
关键注意事项
关于参数
- 默认参数陷阱:避免使用列表、字典等可变对象作为默认值。若必须使用,内部初始化更稳妥,例如
lst = [] if lst is None else lst。 - 参数顺序:遵循必选 → 默认 → *args → **kwargs 的顺序,违反会直接报错。
- 可变对象传参:函数内修改可变对象会影响外部引用。若需隔离影响,调用时可传入副本
lst.copy()。
关于作用域
- 全局变量:修改全局变量需加
global声明,否则会被识别为局部变量导致报错。 - 嵌套变量:修改外层函数的变量需加
nonlocal。 - LEGB 规则:查找顺序依次为 Local(局部)、Enclosing(非局部)、Global(全局)、Built-in(内置)。
关于返回值
- 无
return的函数默认返回None,别误判有隐形返回值。 - 多返回值本质是元组,解包时数量必须匹配,否则会抛出异常。
参数与返回值详解
参数传递方式对比
| 参数类型 | 特点 | 适用场景 | 核心限制 |
|---|---|---|---|
| 位置参数 | 固定数量,顺序严格 | 参数明确且少 | 少传或多传都会报错 |
| 默认参数 | 提供常用值,减少调用负担 | 部分参数可省略 | 必须在位置参数后定义,慎用可变对象 |
| 关键字参数 | 调用时可打乱顺序 | 参数多或怕记混顺序 | 需在位置参数之后 |
| *args |


