Skip to main content

包装器模块,它为可迭代对象提供中缀样式方法链接。

项目描述

关于本模块

包装器模块,它为可迭代对象提供中缀样式方法链接。

不可读:

>>> filter(lambda y: y % 2, map(lambda x: x + 1, iterable))

可读性:

>>> iterable = react(iterable)
>>> iterable.map(lambda x: x + 1).filter(lambda y: y % 2)
https://secure.travis-ci.org/keitaouchi/chainreaction.png

如何安装

需要 python2.6 或更高版本(包括 python3.x)。您需要pip分发setuptools

$ pip install chainreaction

或使用easy_install:

$ easy_install chainreaction

最近更改

0.2.0

  • 支持 python2.6 。

  • 更改为在 python2.x 的“Chainable.filter/map”方法中使用 itertools。

0.1.2

  • 支持“for”语句。

如何使用

使用这个模块最简单也是唯一的方法是调用react函数。 react是一个工厂函数,它从给定的 iterable 中查找'__iter__' / '__getitem__' 并返回包装的对象。

使用示例:

>>> from chainreaction.reactor import react
>>> react("hello")
>>> react([1, 2, 3])
>>> react(iter([1, 2, 3])
>>> class DictLike(dict):pass
>>> react(DictLike())

Chainable 对象支持其被包装对象的任何方法,并尝试包装它们的返回值。按照惯例,有效的方法不返回任何内容,但可链接对象返回用适当的包装器包装的受影响的对象。如果将迭代器传递给react,它将在调用任何迭代方法时被消耗。

使用示例:

>>> tobewrapped = "hello"
>>> wrapped = react(tobewrapped)
>>> wrapped = wrapped.upper().map(lambda c: ord(c))
>>> [chr(c) for c in wrapped.unwrap] = [c for c in tobewrapped.upper()]
True
>>> tobewrapped = [1, 2, 3]
>>> wrapped = react(tobewrapped)
>>> wrapped.append(4).count()
4
>>> len(tobewrapped)
4

如果给出了一个迭代器,这个迭代器将在它调用任何方法时被消耗:

>>> tobewrapped = iter([1,2,3])
>>> wrapped = react(tobewrapped)
>>> wrapped.count()
4
>>> len(list(tobewrapped))
0

微小百分比编码实现示例:

>>> test = bytes("hello world-._~", encoding="UTF-8")
>>> wrapped = react(test)
>>> safe = set()
>>> react("0123456789").foreach(lambda c: safe.add(ord(c)))
>>> react(range(ord('a'), ord('z') + 1)).foreach(lambda b: safe.add(b))
>>> react(range(ord('A'), ord('Z') + 1)).foreach(lambda b: safe.add(b))
>>> react("-._~").foreach(lambda c: safe.add(ord(c)))
>>> test = wrapped.map(lambda b: b if b > 0 else 256 + b)
>>> test = test.map(lambda i: '+' if chr(i).isspace() else chr(i) if i in safe else "%{0:x}".format(i))
>>> test.tostring == "hello+world-._~"
True

基本 API

  • 展开

    从包装的对象中检索可迭代的。

  • 倾倒

    元素转储。

  • 迭代器

    如果包装的对象是迭代器,则为真。

  • 字符串

    返回与“”几乎相同。join((str(x) for x in iterable))。此方法始终返回 str 对象。str 包装返回未包装,字节或 bytearray 包装返回 str 转换,dict 包装返回“key=value”对与“&”连接。

  • 前锋(女)

    将给定的 f 应用于所有元素。

  • 过滤器(预)

    选择满足给定谓词的所有元素。

  • 地图(f)

    通过应用给定的 f 构建一个新集合。

  • forall(预测)

    如果所有元素都满足给定的谓词,则为真。

  • forany(预)

    如果任何元素满足给定谓词,则为真。

  • dropwhile(pred)

    删除满足给定谓词的元素的最长前缀。

  • dropright(预测)

    删除满足给定谓词的元素的最长后缀。

  • takwhile(pred)

    采用满足给定谓词的元素的最长前缀。

  • 夺权(pred)

    采用满足给定谓词的元素的最长后缀。

  • mkstring(joiner="")

    使用连接字符串返回包装的 str 对象。

  • 计数(pred=lambda x:真)

    计算满足给定谓词的元素数。

  • 包含(键)

    测试此包装对象是否包含给定键作为元素。

  • 减少(f)

    使用给定的 f 返回一个值(未包装)。

特定于迭代器的 API

  • 列表

    返回一个包装好的新列表。

  • 元组

    返回一个新包装的元组。

  • 设置

    返回一个包装好的新集合。

str, bytes, bytearray 特定 API

  • 撤销

    返回一个新的反向 str 包装。

序列特定 API

  • 累积(f)

    返回一个累积值的序列。

  • 撤销

    返回一个新的反向 seq 包装。

  • 种类

    返回一个新的排序的 seq 包装。

  • 设置

    返回一个包装好的新集合。

设置特定的 API

  • 分钟

    返回最小值。

  • 最大限度

    返回最大值。

下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

chainreaction-0.2.0.zip (21.1 kB 查看哈希)

已上传 source

chainreaction-0.2.0.tar.gz (15.3 kB 查看哈希)

已上传 source