简单且符合人体工程学的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为什么要在安卓中使用fragment而不是activity   java从JTextField获取输入并将其放入if/else语句中   返回空结果的java复杂sql查询   在Java中如何确定三个骰子的直线?   java如何在我的web项目中配置log4J   上次修改的Java文件返回0   amazonwebservicesjava:Dhttps。未使用proxyHost   java Parse createdAt与当前时间的比较(以分钟为单位)   java sonar“测量过滤器为树形图”颜色显示灰色框而不是绿色框   目标c使用SWT Java创建NSPover   java最新版本tomcatembedloggingjuli与其他嵌入式构件不匹配。。这不是tomcat的一部分吗?   java Hibernate+Spring:无法筛选延迟加载的集合   java如何读取整个文件并列出文件中的项目?   java如何创建没有本地主机地址的ServerSocket对象   java使用Base64将BigInteger转换为字符串,并反转结果   java为什么我的JAXB解组器找不到导入模式中声明的元素?   使用SSL忽略的java Android SMTP邮件发件人   java我无法删除应用程序中的文件   java Tesseract:在hOCR文件中获取单词可信度(x_wconf)