Python学习(13)装饰器和高阶函数
高阶函数
概念:
- 高阶函数是指接收函数作为参数,或者返回一个函数的函数。
示例:
接收函数作为参数:
下面是一个简单的高阶函数示例,它接收一个函数作为参数,并在其执行前后打印日志。
def log_decorator(func): def wrapper(*args, **kwargs): print(f"正在调用 {func.__name__} 函数...") result = func(*args, **kwargs) print(f"{func.__name__} 函数执行完毕") return result return wrapper def add(a, b): return a + b # 使用高阶函数 add_with_log = log_decorator(add) print(add_with_log(3, 5))
在这个示例中,
log_decorator
是一个高阶函数,它接收一个函数func
作为参数,并返回一个新的函数wrapper
。wrapper
函数在执行func
之前和之后打印日志。返回一个函数:
下面是一个返回函数的示例,它根据传入的参数返回一个能够计算特定次幂的函数。
def make_power(n): def power(x): return x ** n return power # 创建一个计算平方的函数 square = make_power(2) print(square(3)) # 输出: 9 # 创建一个计算立方的函数 cube = make_power(3) print(cube(3)) # 输出: 27
在这个示例中,
make_power
是一个高阶函数,它接收一个参数n
,并返回一个新的函数power
,power
函数能够计算传入参数的n
次幂。
装饰器
概念:
- 装饰器是Python中的一种语法糖,它允许你在不修改函数定义的情况下,给函数添加额外的功能。装饰器本质上是一个高阶函数。
示例:
下面是一个使用装饰器的示例,它实现了与前面高阶函数示例相同的功能:在函数执行前后打印日志。
def log_decorator(func):
def wrapper(*args, **kwargs):
print(f"正在调用 {func.__name__} 函数...")
result = func(*args, **kwargs)
print(f"{func.__name__} 函数执行完毕")
return result
return wrapper
@log_decorator
def add(a, b):
return a + b
# 使用装饰器
print(add(3, 5))
在这个示例中,@log_decorator
语法糖使得add
函数被log_decorator
装饰器装饰。这相当于执行了add = log_decorator(add)
,因此add
函数在执行时会先调用log_decorator
中的wrapper
函数,从而实现日志打印的功能。
总结
- 高阶函数:接收函数作为参数,或者返回一个函数的函数。
- 装饰器:一种语法糖,用于在不修改函数定义的情况下,给函数添加额外的功能。装饰器本质上是高阶函数的一种应用。