简单且符合人体工程学的python迭代器链接

iterchain的Python项目详细描述


Documentation Status

iterchan:python的迭代器链接

iterchain是一个库,旨在使在python中操作迭代器更容易,更符合人体工程学。 这个设计受到了Rust iterator design的极大启发,很多功能都来自标准的python itertools库。

为什么我需要这个?

假设我们想知道100以下偶数的平方和。
我们怎么能这样做?

让我们尝试一些简单的程序化python:

>>>total=0>>>foriinrange(100):...ifi%2is0:...total+=i**2...>>>total161700

这是有效的,但是如果你第一次读到这篇文章的话,你可能需要花一点功夫来弄清楚发生了什么,特别是在一些不那么琐碎的情况下。 那么,我们改用迭代器怎么样?

好吧,让我们看看:

>>>sum(i**2foriinrange(100)ifi%2is0)161700

太好了!更短,更容易理解。
但有一个问题,这个模式只适用于相对简单的操作。在这些情况下,您可以尝试使用pythonmapfilter内置(以及稍微隐藏的functools.reduce)。它们允许您构建更复杂的处理链。

让我们重写迭代器以使用这些函数:

>>>sum(map(lambdax:x**2,filter(lambdax:x%2is0,range(100))))161700

好吧,现在一团糟…
我不知道你的情况,但我要花很长时间才能弄清楚这里发生了什么。问题是整个表达式是由内而外的。首先应用filter,但它隐藏在表达式的中间,最后应用sum,但它一直位于前面。毫无意义…

那么,我们该如何改进呢?iterchain当然!
(您可能已经看到了这一点)

那么,让我们看看使用iterchain

时它的外观如何
>>>importiterchain>>>(iterchain.count(stop=100)....filter(lambdax:x%2is0)....map(lambdax:x**2)....sum())161700

这不是更好吗?这些操作按执行顺序列出,并清楚地分开,您可以拥有任意数量的操作。这就是为什么你应该使用iterchain

迭代器操作

这个图书馆的核心。

发电机

iterchain还提供了方便的方法,让您可以从头开始构建新的Iterator实例。它们包含在iterchain.generators子模块中,但是也可以直接从iterchain模块访问它们,这是使用它们的首选方式。

例如:

  >>> import iterchain
  >>> iterchain.count().take(4).map(lambda x: x**2).to_list()
  [0, 1, 4, 9]

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java这个mysql查询是对还是错?   Java中字符串列表的最大值   二维码Zxing NotFoundException Java   循环Java蛇眼程序错误   JDBCJava。sql。SQLException:[Microsoft][ODBC驱动程序管理器]描述符索引无效   java如何增加if语句中的变量以用于另一个语句?   多线程java。执行多线程数据库应用程序时发生lang.NullPointerException   java为什么HashMap比HashSet快?   java执行与接收到的字符串相对应的方法   java在我的场景中使用ModelMapper的最佳方法   java JSoup从元素列表创建数组列表   字符串Java将文件路径转换为图像   java为什么在windows上尝试启动Grails 3+时出现禁止<403>错误?   java Get实体组计数始终返回0   java正在遍历队列的concurrentHashMap,以查看是否所有队列都是空的,而其他线程可能会添加到队列中   使用ApachePOI批量读取XLSX文件   java如何摆脱arrayList中的匿名对象?   尝试重写NamingProxy内的函数时出现java错误[构造函数的参数0]   java引用Maven jar中JSSE的密钥库文件