欢迎访问宙启技术站
智能推送

Python 函数式编程的高阶函数

发布时间:2023-06-16 03:04:21

Python 作为一种多范式语言,支持多种编程风格,包括面向对象编程、函数式编程和过程式编程。在 Python 中,函数是一等公民,也就是说函数可以像普通变量一样进行传递、赋值和操作。这为函数式编程提供了很好的支持。本文将介绍 Python 中的高阶函数,这是函数式编程的核心概念之一。

高阶函数是指一个函数接受或返回一个函数作为参数的函数。简单地说,高阶函数就是对其他函数进行操作的函数。Python 提供的内置函数中,有很多都是高阶函数,比如 map()、filter()、reduce() 等等。这些函数都是对其他函数进行操作的,接受一个函数作为参数,并返回一个新的函数或结果。

map() 函数是一个高阶函数,它接受两个参数,一个是函数,一个是序列,返回一个可迭代对象。map() 函数将输入序列中的每个元素传递给指定的函数进行操作,然后将结果收集到一个新的列表中返回。以下是一个使用 map() 函数的例子:

def square(x):
    return x ** 2

input_list = [1, 2, 3, 4, 5]

output_list = map(square, input_list)

print(output_list)  # <map object at 0x7f9dbe74c460>

print(list(output_list))  # [1, 4, 9, 16, 25]

在这个例子中,定义了一个 square() 函数,将输入的值平方返回。通过调用 map() 函数和 square() 函数,将列表 input_list 中的每个元素都进行平方操作,得到了一个新的可迭代对象 output_list,最后通过 list() 函数将可迭代对象转换为列表输出。

另一个常用的高阶函数是 filter() 函数,它接受两个参数,一个是函数,一个是序列,返回一个可迭代对象。filter() 函数对序列中的每个元素调用指定的函数,返回 True 或 False,最后将返回 True 的元素收集到一个新的列表中返回。以下是使用 filter() 函数的例子:

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

input_list = [1, 2, 3, 4, 5]

output_list = filter(is_even, input_list)

print(output_list)  # <filter object at 0x7fe4e7fc8cd0>

print(list(output_list))  # [2, 4]

在这个例子中,定义了一个 is_even() 函数,判断输入的值是否为偶数,并返回 True 或 False。通过调用 filter() 函数和 is_even() 函数,将列表 input_list 中的每个元素都进行判断,并返回为 True 的元素,得到一个新的可迭代对象 output_list,最后通过 list() 函数将可迭代对象转换为列表输出。

reduce() 函数是 Python 2 中提供的一个高阶函数,其作用是将一个序列归约为单个值,即将序列中的所有元素同时传递给指定的函数进行操作。在 Python 3 中,reduce() 函数被移动到 functools 模块中。以下是使用 reduce() 函数的例子:

from functools import reduce

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

input_list = [1, 2, 3, 4, 5]

output = reduce(add, input_list)

print(output) #  15

在这个例子中,定义了一个 add() 函数,将两个输入值相加并返回。通过调用 reduce() 函数和 add() 函数,将列表 input_list 中的所有元素依次传递给 add() 函数进行操作,最后将返回的结果作为 reduce() 函数的结果输出。

除了上述内置的高阶函数之外,Python 中还有一些其他有用的高阶函数。例如,sorted() 函数可以对列表进行排序,接受一个函数作为排序规则。

input_list = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]

output_list = sorted(input_list, key=lambda x: -x)

print(output_list)  # [9, 6, 5, 5, 5, 4, 3, 3, 2, 1, 1]

在这个例子中,使用 sorted() 函数对列表 input_list 进行降序排序,传递了一个 lambda 函数作为排序规则。

Python 中的高阶函数是函数式编程的核心概念之一。通过使用高阶函数,可以将代码变得更加简洁、灵活和可复用。在实际应用中,高阶函数经常被用于处理大量数据、处理复杂算法、实现函数组合等。