1.函数的定义
函数:提前组织好,可重复使用的,用来实现特定功能的代码段
def 函数名(参数列表):
"""文档字符串(可选,说明函数功能)"""
函数体
return 返回值(可选,无则返回None)
先定义函数,后调用
程序调用一个函数需要执行四个步骤:
- 调用程序在调用处暂停执行
- 在调用时将实参复制给函数的形参
- 执行函数体语句
- 函数调用结束给出返回值,程序回到调用前的暂停处继续执行
二、函数的参数
参数是函数与外部交互的核心,Python 支持多种参数类型,优先级:位置参数 > 关键字参数 > 默认参数 > 可变参数 > 关键字可变参数。
| 类型 | 定义 / 调用方式 | 核心说明 |
|---|---|---|
| 位置参数 | def f(a,b): ... / f(1,2) | 必传、按顺序匹配 |
| 关键字参数 | f(b=2, a=1) | 按参数名匹配,顺序可任意 |
| 默认参数 | def f(a, b=10): ... | 非必传,默认值建议用不可变类型 |
| 可变位置参数 | def f(*args): ... | 接收任意位置参数,打包为元组 |
| 可变关键字参数 | def f(**kwargs): ... | 接收任意关键字参数,打包为字典 |
传入的实际参数的类型不受限制,随意传,但是能不能跑就看具体代码
传入参数的数量是不限的
三、函数的作用域
变量的作用域指变量能被访问的范围,Python 中有 4 种作用域:
1. 作用域类型
- 局部作用域(Local, L) :函数内部定义的变量,仅在函数内有效;
- 嵌套作用域(Enclosing, E) :嵌套函数中,外层函数的变量,内层函数可访问(非全局);
- 全局作用域(Global, G) :模块(.py 文件)级别定义的变量,整个模块可访问;
- 内置作用域(Built-in, B) :Python 内置的变量 / 函数(如
print、len)。
2. 核心规则
- 就近原则:变量查找优先从当前作用域往上层找;
- 局部变量不能修改全局变量(除非用
global声明); - 嵌套函数修改外层变量(Enclosing 作用域)需用
nonlocal声明。
四、函数的进阶特性
1. 匿名函数(lambda)
用 lambda 关键字定义的极简函数,语法:lambda 参数列表: 表达式
- 无函数名,仅能写一个表达式(不能写循环 / 条件语句);
- 常用于临时逻辑、配合内置函数(如
sorted、map、filter)。
2.嵌套函数
函数内部定义另一个函数:
def outer():
def inner():
print("这是内层函数")
inner() # 外层函数调用内层函数
outer() # 输出:这是内层函数
3. 递归函数
函数调用自身,需满足两个条件:
- 有明确的终止条件(避免无限递归);
- 每次调用都向终止条件靠近。
关于None:作为一个特殊的字面量,用于表示:空,无意义,其具有非常多的应用场景
- 用在函数无返回值上
- 用在if判断上:在if判断中,None等同于False,一般用于在函数中主动返回None,配合if判断做相关处理
- 用于声明无内容的变量:定义变量,但暂时不需要变量有具体值,可以用None代替