Python 编写高阶函数

  • Post category:Python

高阶函数是指接收一个或多个函数作为参数,或者返回一个函数的函数。在Python中,函数被视为对象,因此函数也可以作为参数传递给函数或从函数返回。高阶函数的使用可以大幅度简化代码,提高代码的可读性和可维护性。

什么是高阶函数

Python的内置函数map、filter和reduce就是典型的高阶函数。map函数接收一个函数和一个迭代器作为参数,对迭代器中的每个元素应用该函数,并返回结果组成的新的迭代器。示例代码如下:

def square(x):
    return x * x

numbers = [1, 2, 3, 4, 5]
squares = map(square, numbers)
print(list(squares))    # 输出 [1, 4, 9, 16, 25]

filter函数同样接收一个函数和一个迭代器作为参数,该函数根据迭代器中每个元素的布尔值来筛选出符合条件的元素,并返回结果组成的新的迭代器。示例代码如下:

def is_even(x):
    return x % 2 == 0

numbers = [1, 2, 3, 4, 5]
evens = filter(is_even, numbers)
print(list(evens))    # 输出 [2, 4]

reduce函数接收一个函数和一个迭代器作为参数,该函数对迭代器中的元素进行累计计算,并返回计算结果。示例代码如下:

from functools import reduce

def multiply(x, y):
    return x * y

numbers = [1, 2, 3, 4, 5]
product = reduce(multiply, numbers)
print(product)    # 输出 120

如何编写高阶函数

编写高阶函数的关键在于灵活运用函数和闭包。函数作为参数和返回值是实现高阶函数的基础,而闭包则可以让函数捕获到上下文环境中的变量,从而实现更加复杂的功能。

下面是一个示例,实现了一个通用的打印日志的高阶函数,该函数可接收一个函数作为参数,实现对该函数调用的日志记录。示例代码如下:

def logger(func):
    def wrapper(*args, **kwargs):
        print(f"Calling function {func.__name__} with arguments {args} and {kwargs}")
        result = func(*args, **kwargs)
        print(f"Function {func.__name__} returned {result}")
        return result
    return wrapper

@logger
def add(x, y):
    return x + y

result = add(2, 3)
print(result)    # 输出 5

总结

Python中的高阶函数可以大幅度简化代码,提高代码的可读性和可维护性。通过灵活运用函数和闭包,我们可以编写出复杂的高阶函数,从而实现更加强大的功能。