提升你的Python技能:高阶函数详解

B站影视 港台电影 2025-04-03 16:53 1

摘要:Python进阶必看!掌握map, filter, reduce等高阶函数,告别循环地狱!轻松实现数据处理和转换,代码更简洁高效。函数式编程范式加持,模块化设计提升代码可读性!云原生时代,玩转Python,你就是DevOps大神!

Python进阶必看!掌握map, filter, reduce等高阶函数,告别循环地狱!轻松实现数据处理和转换,代码更简洁高效。函数式编程范式加持,模块化设计提升代码可读性!云原生时代,玩转Python,你就是DevOps大神!

译自:Level Up Your Python: Higher-Order Functions Explained

作者:Jessica Wachtel

在 Python,以及像 JavaScript 和 Ruby 这样的语言中,高阶函数如 map, filter 和 reduce 被用于处理和转换数据。它们可以在不需要显式循环的情况下对数据进行灵活的操作。高阶函数对其他函数进行操作——或者将函数作为参数,或者在某些情况下,返回函数作为结果。最终的结果是清晰、简洁、可读和模块化的代码。

虽然高阶函数通常与 函数式编程 范式相关联,但采用函数式编程风格并不是使用 map, filter 或 reduce 的必要条件。这些函数可以被整合到任何应用程序结构中。map, filter 和 reduce 不是唯一的高阶函数。任何函数,如果它接受一个函数作为参数或返回一个函数作为结果,都可以是一个高阶函数。

在这篇文章中,我们将探讨 map, filter 和 reduce 函数,它们的基本语法,并提供一些简单的实现。

当你需要对一个可迭代对象(如列表或元组)中的每个项目应用一个特定的操作或转换,并返回一个新的可迭代对象(通常是一个 map 对象)作为结果时,可以使用 map 函数。

基本语法:

pymap(function, iterable)

map 在执行诸如将数据从一种形式转换为另一种形式的任务时特别有用,例如将字符串转换为整数或更改日期格式。

py#original liststring_numbers = ["1", "2", "3", "4"]#implementation of mapint_numbers = map(int, string_numbers)#transformed dataprint(list(int_numbers))

输出:

[1, 2, 3, 4]

当你需要一个对单个元素进行操作的函数时,map 也非常有用。你可以在 map 中构建该功能,通过将其应用于可迭代对象的每个元素,从而消除对显式循环的需求。

py#main actiondef add_five(x):return x + 5#original listnumbers = [1, 2, 3]#map implementationresult = map(add_five, numbers)#resultsprint(list(result))

filter 基于函数中指定的条件过滤掉可迭代对象中的元素。它返回一个 filter 对象,可以将其转换为列表。

基本语法:

pyfilter(function, iterable)

filter 对于执行诸如从列表中删除不需要的元素之类的任务很有帮助。下面的示例从数字列表中删除 None:

py#original listdata = [0, None, 1, 2, None, 3]#implementatio of filterfiltered_data = filter(None, data)#resultsprint(list(filtered_data))

输出:

[1, 2, 3]

你还可以根据条件过滤列表,例如提取偶数:

py#conditiondef is_even(x):return x % 2 == 0# original listnumbers = [1, 2, 3, 4, 5, 6]# implementation of filtereven_numbers = filter(is_even, numbers)#resultsprint(list(even_numbers))

reduce 可以说是最难掌握的高阶函数。虽然有一些更简单的实现,但更复杂的实现可能会变得非常具有挑战性。为了本文的目的,我们将专注于更简单的实现。

基本语法:

py#import statementfrom functools import reducereduce(function, iterable)

你将看到的 reduce 最常见的例子是求一个数字列表的和。

py# addition functiondef add(x, y):return x + y#original listnumbers = [1, 2, 3, 4, 5]#implementation of reduceresult = reduce(add, numbers)#resultsprint(result)

输出:

[15]

reduce 在查找列表中的最大值时也很有用:

py# conditiondef max_value(x, y):return x if x > y else y#original listnumbers = [10, 2, 33, 4, 7]#implementation of reduceresult = reduce(max_value, numbers)#resultsprint(result)

输出:

像 map, filter 和 reduce 这样的高阶函数提供了强大的方法,可以用干净、简洁和可读的代码来处理和转换数据。这些函数可以帮助你抽象通用操作,减少对显式循环的需求,并提高代码的模块化程度。

来源:文文课堂

相关推荐