上一篇【python】Python中的函数式编程:何时以及如何使用它-第三篇
从迭代器中选择元素 filter()
filter()允许您基于给定功能的评估从迭代中选择或筛选项目。它的调用方式如下:
filter(
在以下示例中,greater_than_100(x)如果为真,则为真x > 100:
在这种情况下,greater_than_100()对项目truthy 111,222和333,因此这些项目依然存在,而1,2和3被丢弃。与前面的示例一样,它greater_than_100()是一个短函数,您可以将其替换为lambda表达式:
下一个示例功能range()。range(n)产生一个迭代器,该迭代器生成从0到的整数n - 1。下面的示例用于filter()从列表中仅选择偶数,并过滤掉奇数:
这是一个使用内置字符串方法的示例:
从前面的教程记住的字符串的方法是s.isupper()返回True,如果所有的字母字符s是大写字母,False否则。
用 reduce()
reduce()将一项功能一次应用于两个可迭代项,并将它们逐步组合以产生单个结果。
reduce()曾经是Python中的内置函数。吉多·范·罗苏姆(Guido van Rossum)显然颇为不满reduce(),他主张将其从语言中完全删除。这是他不得不说的:
所以现在reduce()。实际上,这是我一直最讨厌的一个,因为除了涉及到+或的几个示例外*,几乎每次我看到reduce()带有非平凡函数参数的调用时,我都需要拿笔和纸来画出实际被喂食的东西进入该功能之前,我不知道reduce()应该做什么。因此,在我看来,的适用范围reduce()几乎仅限于关联运算符,在所有其他情况下,最好显式地写出累加循环。
实际上倡导消除所有三个reduce(),map()和filter()在Python。一个人只能猜测他的理由。碰巧的是,前面提到的列表理解涵盖了所有这些功能以及更多功能所提供的功能。
如您所见,map()并filter()保留在Python中的内置函数。reduce()不再是内置函数,但可以从标准库模块导入,如下所示。
要使用它reduce(),您需要从名为的模块中导入它functools。这可以通过多种方式实现,但是以下是最简单的方法:
之后,解释器将reduce()放入全局名称空间并使其可用。您将在下面看到的示例假设是这种情况。
调用reduce()有两个参数
最简单的reduce()调用需要一个函数和一个可迭代的函数,如下所示:
reduce(
此调用从列表中reduce()产生结果,如下所示:15[1, 2, 3, 4, 5]
这是对列表中的数字求和的一种相当round回的方式!尽管这很好用,但是还有一种更直接的方法。Python的内置sum()函数以可迭代的方式返回数字值的总和:
请记住,二进制加号运算符还会连接字符串。因此,该示例也将逐步将列表中的字符串连接起来:
同样,有一种方法可以使大多数人更典型地考虑使用Pythonic。这正是这样str.join()做的:
现在考虑使用二进制乘法运算符(*)的事例。正整数的阶乘n定义如下:
您可以使用reduce()和来实现阶乘函数range(),如下所示:
再一次,有一种更简单的方法可以做到这一点。您可以使用factorial()标准math模块提供的:
作为最后一个示例,假设您需要在列表中找到最大值。Python提供了内置函数max()来执行此操作,但是您也可以使用reduce():
文章来源:《电脑编程技巧与维护》 网址: http://www.dnbcjqywh.cn/zonghexinwen/2021/0313/781.html
电脑编程技巧与维护投稿 | 电脑编程技巧与维护编辑部| 电脑编程技巧与维护版面费 | 电脑编程技巧与维护论文发表 | 电脑编程技巧与维护最新目录
Copyright © 2018 《电脑编程技巧与维护》杂志社 版权所有
投稿电话: 投稿邮箱: