Python 函数是组织代码、实现复用的核心结构,核心知识点可归纳为以下几类,覆盖定义、调用、参数、进阶特性等关键内容:
一、函数的基本定义与调用
函数通过
def
关键字定义,包含 “函数名、参数、函数体、返回值” 四要素,调用时直接使用函数名 + 括号传递参数。- 基本语法:
def 函数名(参数列表):函数体 # 要执行的代码return 返回值 # 可选,无return则默认返回None
- 调用示例:
def add(a, b): # 定义函数,参数a、breturn a + b # 返回计算结果result = add(3, 5) # 调用函数,传递参数3、5,接收返回值 print(result) # 输出:8
二、函数的参数类型
Python 函数参数支持多种传递方式,核心是 “位置” 和 “关键字” 的灵活组合,避免参数混淆。
- 位置参数:必须按定义顺序传递,数量与参数列表一致(如上述
add(3,5)
中,3 对应 a,5 对应 b)。 - 关键字参数:通过 “参数名 = 值” 传递,可打乱顺序(如
add(b=5, a=3)
,结果仍为 8)。 - 默认参数:定义时给参数设默认值,调用时可省略该参数(默认值需放在参数列表末尾):
def greet(name, msg="Hello"): # msg默认值为"Hello"print(f"{msg}, {name}!")greet("Alice") # 省略msg,输出:Hello, Alice! greet("Bob", "Hi") # 覆盖默认值,输出:Hi, Bob!
- 可变长参数:处理不确定数量的参数,分两类:
*args
:接收任意数量的位置参数,打包成元组(tuple):def sum_all(*args):return sum(args) # sum()可直接计算元组元素和print(sum_all(1,2,3)) # 输出:6;args=(1,2,3)
**kwargs
:接收任意数量的关键字参数,打包成字典(dict):def print_info(**kwargs):for k, v in kwargs.items():print(f"{k}: {v}")print_info(name="Alice", age=20) # 输出:name: Alice;age: 20;kwargs={"name":"Alice", "age":20}
三、函数的返回值(return)
- 函数通过
return
传递结果,执行到return
后会立即退出函数(后续代码不执行)。 - 可返回多个值,默认以元组形式返回,调用时可直接解包:
def get_info():name = "Alice"age = 20return name, age # 等价于 return (name, age)n, a = get_info() # 解包,n="Alice",a=20
- 无
return
或return
后无值时,默认返回None
(如def hello(): print("Hi")
,调用后返回None
)。
四、函数的进阶特性
1. 匿名函数(lambda)
- 用
lambda
定义 “单行短函数”,无函数名,语法:lambda 参数: 表达式
(表达式结果即返回值)。 - 常与
sorted()
、map()
等函数配合使用,简化代码:# 用lambda定义简单加法 add = lambda a, b: a + b print(add(3,5)) # 输出:8# 配合sorted()按元组第二个元素排序 lst = [(1,3), (4,1), (2,5)] sorted_lst = sorted(lst, key=lambda x: x[1]) # key指定排序依据 print(sorted_lst) # 输出:[(4,1), (1,3), (2,5)]
2. 嵌套函数(内部函数)
- 函数内部可定义另一个函数(内部函数),内部函数可访问外部函数的变量(闭包基础):
def outer(x):def inner(y): # 内部函数return x + y # 访问外部函数的xreturn inner # 外部函数返回内部函数f = outer(3) # f等价于inner,且已“记住”x=3 print(f(5)) # 调用inner(5),输出:8
3. 闭包
- 满足两个条件的嵌套函数:① 内部函数引用外部函数的 “非全局变量”;② 外部函数返回内部函数(如上述
outer()
示例)。 - 作用:保留外部函数的变量状态,避免使用全局变量。
4. 装饰器(decorator)
- 不修改原函数代码,为函数 “添加额外功能”(如日志、计时、权限校验)的工具,本质是 “接收函数、返回函数的函数”。
- 用
@装饰器名
语法简化调用:# 定义装饰器:计算函数执行时间 import time def timer(func):def wrapper(*args, **kwargs): # 接收原函数的所有参数start = time.time()result = func(*args, **kwargs) # 调用原函数end = time.time()print(f"{func.__name__}执行时间:{end-start:.2f}秒")return result # 返回原函数结果return wrapper# 用@为sum_all函数添加计时功能 @timer def sum_all(*args):time.sleep(1) # 模拟耗时操作return sum(args)sum_all(1,2,3) # 输出:sum_all执行时间:1.00秒;返回6
五、函数的作用域
变量的可访问范围,Python 遵循 LEGB 规则(优先级从高到低):
- L(Local):函数内部的局部变量(仅函数内可访问)。
- E(Enclosing):嵌套函数的外部函数变量(如闭包中的外部变量)。
- G(Global):全局变量(定义在函数外,整个文件可访问),函数内修改需用
global
声明。 - B(Built-in):Python 内置变量 / 函数(如
print()
、sum()
,无需定义直接用)。
示例:
global_var = 10 # 全局变量def outer():enclosing_var = 20 # E层变量def inner():local_var = 30 # L层变量print(local_var, enclosing_var, global_var) # 可访问L、E、Ginner()outer() # 输出:30 20 10
六、常用内置函数
Python 提供大量无需定义的内置函数,简化开发,常见如:
- 数据处理:
sum()
(求和)、max()
(最大值)、min()
(最小值)、len()
(长度)。 - 类型转换:
int()
、str()
、list()
、dict()
。 - 迭代操作:
map(func, iter)
(用 func 处理迭代器元素)、filter(func, iter)
(筛选满足条件的元素)。 - 其他:
print()
(输出)、input()
(输入)、range()
(生成整数序列)。