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

如何使用Python中的高阶函数(higherorderfunctions)?

发布时间:2023-06-23 23:32:58

高阶函数,是指可以接受函数作为参数或返回函数作为结果的函数,它是函数式编程的核心思想之一。Python 中内置了一些常用的高阶函数,如 map()、reduce()、filter() 等,同时也支持通过定义自己的可调用对象,来实现自定义的高阶函数。

1. map()

map() 函数可以对一个序列的每个元素都应用一个函数,并将处理结果放入一个新的序列中返回。它的语法格式为:

map(function, iterable, ...)

其中,function 是一个函数或可调用对象,用于对 iterable 中的每个元素进行处理。iterable 是一个序列,可以是列表、元组、字符串等。

例如,对一个列表中的每个数都求平方,可以使用以下代码:

lst = [1, 2, 3, 4]

squared = map(lambda x:x**2, lst)

print(list(squared))  # Output: [1, 4, 9, 16]

这里使用了 lambda 表达式来定义处理函数,在 map() 函数调用后,返回的是一个可迭代对象,需要使用 list() 函数来转化为列表。

2. filter()

filter() 函数可以过滤一个序列中的元素,并返回符合条件的元素组成的新序列。它的语法格式为:

filter(function, iterable)

其中,function 是一个函数或可调用对象,用于对 iterable 中的每个元素进行判断,并返回 True 或 False。iterable 是一个序列,可以是列表、元组、字符串等。

例如,从一个列表中筛选出所有的偶数,可以使用以下代码:

lst = [1, 2, 3, 4]

even = filter(lambda x:x%2==0, lst)

print(list(even))  # Output: [2, 4]

同样需要注意返回的是一个可迭代对象,需要使用 list() 函数来转化为列表。

3. reduce()

reduce() 函数可以对一个序列依次应用一个函数,并将处理结果累计为一个总结果。它的语法格式为:

reduce(function, iterable[, initial])

其中,function 是一个函数或可调用对象,用于将 iterable 序列中的两个元素进行一次操作,每次操作后的结果都被作为下一次操作的 个参数,并最终得到一个总结果。initial 是可选的,用于设置操作的初始值。

例如,计算一个列表中所有数的和,可以使用以下代码:

from functools import reduce

lst = [1, 2, 3, 4]

total = reduce(lambda x,y:x+y, lst, 0)

print(total)  # Output: 10

需要注意的是,reduce() 函数需要从 functools 模块中导入。

4. 自定义高阶函数

Python 中允许我们定义自己的可调用对象,通过这种方式来实现自定义的高阶函数。一个可调用对象,必须是一个实现了 __call__() 方法的类。

例如,实现一个高阶函数,用于对两个数进行相加,如果相加的结果大于 100,则返回 "too big",否则返回相加的结果:

class Adder:

    def __call__(self, x, y):

        result = x + y

        if result > 100:

            return "too big"

        else:

            return result

adder = Adder()

print(adder(50, 60))  # Output: 110

print(adder(20, 30))  # Output: 50

print(adder(80, 30))  # Output: "too big"

这里定义了一个 Adder 类,并实现了 __call__() 方法,这个方法接受两个数作为参数,并返回这两个数的和。在实例化后,我们可以将这个对象看作一个函数,并按照正常的函数调用方式来使用。

总结

高阶函数是函数式编程的核心思想之一,Python 中内置了一些常用的高阶函数,如 map()、reduce()、filter() 等,同时也支持自定义高阶函数。使用高阶函数可以大大简化程序代码,并提高程序的可读性和可维护性。