Python 构建高阶函数

  • Post category:Python

Python 中的高阶函数指的是能够接收一个或多个函数作为参数或者返回一个函数作为结果的函数。使用高阶函数能够更加灵活地处理数据和逻辑,增加代码的可读性和可维护性。

构建高阶函数的方法

构建高阶函数的方法有两种:

  1. 把函数作为参数传递给其他函数
  2. 在函数内部使用函数并将其作为返回值返回

1. 把函数作为参数传递给其他函数

def apply_operation(x, y, operation):
    return operation(x, y)

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

def subtract(x, y):
    return x - y

result = apply_operation(2, 3, add)
print(result) # 5

result = apply_operation(2, 3, subtract)
print(result) # -1

在上述示例中,apply_operation() 函数接收三个参数,前两个参数 xy 是要进行运算的数字,第三个参数 operation 是一个函数,用于指定进行的运算。add()subtract() 函数分别实现了加法和减法操作,作为 apply_operation() 的第三个参数进行调用。

2. 在函数内部使用函数并将其作为返回值返回

def multiply_by(factor):
    def multiply(number):
        return factor * number
    return multiply

double = multiply_by(2)
result = double(5)
print(result) # 10

triple = multiply_by(3)
result = triple(5)
print(result) # 15

在上述示例中,multiply_by() 函数接收一个参数 factor,并返回一个内部函数 multiply。在 multiply 函数内部,对传入的参数进行 factor 倍的乘法运算,并返回结果。使用 multiply_by() 函数创建 doubletriple 函数,分别将 factor 参数设置为 2 和 3,然后分别调用它们。

示例说明

以下两个示例将演示如何使用高阶函数来增强代码的灵活性和可读性。

找出列表中的奇数和偶数

def split_numbers(numbers, split_function):
    result = [[], []]
    for number in numbers:
        index = split_function(number)
        result[index].append(number)
    return result

def odd_or_even(number):
    if number % 2 == 0:
        return 0
    else:
        return 1

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
result = split_numbers(numbers, odd_or_even)
print(result) # [[2, 4, 6, 8], [1, 3, 5, 7, 9]]

在上述示例中,split_numbers() 函数接收两个参数,一个是要进行拆分的数字列表 numbers,另一个是指定拆分条件的函数 split_function。在 split_numbers() 函数中,遍历 numbers 列表中的每个数字,并根据调用 split_function() 函数的结果来将其分配到对应的奇数或偶数列表中。odd_or_even() 函数用于判断数字是奇数还是偶数,如果是偶数返回 0,如果是奇数返回 1。使用 split_numbers() 函数把 numbers 列表中的数字按照奇偶拆分成两个列表,将结果保存在 result 变量中。

对列表中的元素进行排序

def sort_elements(elements, key_function):
    return sorted(elements, key=key_function)

def sort_by_length(string):
    return len(string)

elements = ['apple', 'banana', 'cherry', 'date']
result = sort_elements(elements, sort_by_length)
print(result) # ['date', 'apple', 'banana', 'cherry']

在上述示例中,sort_elements() 函数接收两个参数,一个是待排序的元素列表 elements,另一个是用于排序的关键函数 key_function。内部使用了 Python 内置的 sorted() 函数以及 key 参数来进行排序操作。sort_by_length() 函数用于返回传入字符串参数的长度。使用 sort_elements() 函数将 elements 列表按照元素长度进行排序,将结果保存在 result 变量中。