尽管 Python 不是为函数式编程而构建的,但它确实支持函数式编程的一些非常棒的特性。如果您希望您的程序更优雅、更可靠和无状态,那么函数式编程可能是您的考虑因素。

本文将介绍 Python 中的 3 个工具/函数,它们可以为您提供强大的函数和优雅地重构程序的能力。

虽然Python不是为函数式编程而构建的,但它确实支持函数式编程的一些非常棒的特性。如果您希望您的程序更加优雅、可靠和无状态,那么函数式编程可能是您的考虑因素。

1. Map

什么是map函数?map函数有两个参数,第一个是您要应用的函数,第二个或多个后续参数是您希望该函数应用到的可迭代对象。让我们看下一个个例子:

在这里,我们想要对列表中的数字进行平方。方法是定义一个函数,然后使用map(function_you_want_to_apply, your_list). 请注意,您当然可以将您的函数应用于列表之外的任何可迭代对象。此外,该map函数将返回一个迭代器,您需要迭代返回的迭代器以获取所有结果。

另一种用法是您可以将该函数应用于多个可迭代对象。然而,在这种情况下,你必须让你的函数接受多个参数——每个可迭代的参数。

如果你仍然像以前一样使用单参数函数square,Python 会抱怨的。

另一个技巧是经常将 lambda 表达式与map函数结合使用,以使您的代码简洁。Python 中的 lambda 表达式采用lambda your_arguments_to_take_in : expression_to_return. 例如,对于上述 2 个示例,我们可以将它们转换为:

2. Reduce

reduce函数的工作原理类似于 map-reduce 中的 reduce 概念。它接受一个数据流,或者在 Python 语言中,一个可迭代对象,并将函数从左到右应用于迭代器。使用reduce关键字可以像map关键字一样创建简洁的语句。reduce和之间的一个关键区别mapreduce将函数累积地应用于您的可迭代对象。这意味着它首先从可迭代对象中获取 n 个参数,然后返回 1 个结果,然后从可迭代对象中获取下一个 n-1 个参数,并与之前的 1 个结果结合形成下一个 n 个参数以传递给您的函数。换句话说,reduce关键字旨在将您的可迭代结果减少到 1 个。

在上面的代码中,我们从maptoreduce关键字变为我们的结果从一个迭代器变为一个 int。

要了解它是如何工作的,我们可以参考关于 reduce 的官方 Python 文档。根据它,reduce关键字的作用大致相当于以下函数:

您会看到reduce最终返回一个值,而不是 map可迭代对象。当然,你总是可以将mapreduce组合在一起产生一个强有力的声明。例如,以下代码片段可以在一行内计算列表的欧几里得范数:

map和在reducePython 和一般编程中超级有用和强大,请随意使用它!

3. Filter

在上面的两个讨论中,我们学习了如何将函数应用于一个可迭代的和输出具有相同长度的结果和一个值。怎么样:我们想过滤数组的所有奇数值,并在可迭代对象中留下偶数。在这种情况下,mapand都不能reduce正常工作,这就是filter关键字的用武之地。基本语法仍然与 mapreduce相同,只是除了filter的函数参数必须返回一个布尔值,在 Python 中称为谓词。现在,让我们输入代码:

另外,请注意,filter关键字返回一个可迭代的,就像map,而不是一个值。当然,在Python中,将filter, map, reduce结合起来创建更复杂的一行程序是很自然的。例如,假设我们要计算所有偶数的平方和:

现在,您已经从Python学习了这3个强大的关键字。在程序中适当地使用它们可以让代码看起来很优雅。现在,轮到你应用它们了!快乐学习和快乐编码吧!

发表回复