iterables的轻量级链接功能方法
chainz的Python项目详细描述
Chainz是一个轻量级库,提供链接、函数方法 致Iterables。
要安装:pip install chainz
基本示例:
fromchainzimportChainChain(xrange(10))\ .map(lambdax:x+1)\ .filter(lambdax:x%2==0)\ .omit(lambdax:x%3==0)\ .reduce(lambdax,y:x+y)# 30
链条
chainz中的基类是Chain,它接受 作为其构造函数的参数。它本身就是一个可接受的, 只是暴露提供的iterable它公开了如下函数方法 map、filter和flatten,它们返回链以便 可连锁这些方法改变链;chain.map(f)是相同的 作为chain = chain.map(f)
有些方法,比如reduce和for_each,是“sinks”,其中 他们把食物吃掉了。这些方法不会将链返回到 明确一点,一旦它们被调用,链就完成了。
所有非接收器方法都是惰性的,因此它们不会产生任何计算结果。 仅通过使用sink方法,或以另一种方式使用iterable (比如list(chain)或者[x for x in chain]),你真的 评估iterable。
您可以将Chain看作是将itertools包装在 可连锁的时尚。
错误
默认情况下,只要出现异常,Chain就会停止经常 那不是你想要的当你处理一长串的项目时 (为其专门创建Chain的内容),您只需 想记下哪里出了问题,然后转到下一个项目。方法 on_error允许这样做。它有一个功能 f(exception, object),它本身有两个参数第一次 参数是引发的异常第二个参数是对象 这导致了例外。
示例
defhandle_error(exception,obj):print("%s caused exception: %s"%(obj,exception))defdouble(x):ifx==1:raiseException('Bad')returnx*2chain=Chain(xrange(3)).on_error(handle_error).map(double)list(chain)# "1 caused exception: Exception('Bad')"# [0, 2]
API
请查看自动生成的docs/目录(因此 最新)文件。这是从doc字符串生成的,所以 内省也有帮助(例如,print Chain.reduce.__doc__)。