高阶函数

概念

  • 高阶函数是指接收函数作为参数,或者返回一个函数的函数。

示例

  1. 接收函数作为参数

    下面是一个简单的高阶函数示例,它接收一个函数作为参数,并在其执行前后打印日志。

    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作为参数,并返回一个新的函数wrapperwrapper函数在执行func之前和之后打印日志。

  2. 返回一个函数

    下面是一个返回函数的示例,它根据传入的参数返回一个能够计算特定次幂的函数。

    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,并返回一个新的函数powerpower函数能够计算传入参数的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函数,从而实现日志打印的功能。

总结

  • 高阶函数:接收函数作为参数,或者返回一个函数的函数。
  • 装饰器:一种语法糖,用于在不修改函数定义的情况下,给函数添加额外的功能。装饰器本质上是高阶函数的一种应用。

本文著作权由作者所有,Python学习(13)装饰器和高阶函数 收录于 日有所思,商业授权请联系作者。

添加新评论

登录