包装器模块,为iterable对象提供中缀样式的方法链接。
chainreaction的Python项目详细描述
关于本模块
包装器模块,为iterable对象提供中缀样式的方法链接。
未读:
>>> 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)
如何安装
需要python2.6或更高版本(包括python3.x)。 您需要pip或distribute或setuptools:
$ pip install chainreaction
或使用简易安装:
$ easy_install chainreaction
最近更改
0.2.0
- 支持python2.6。
- 已更改为在python2.x中的“chainable.filter/map”方法中使用itertools。
0.1.2
- 支持“for”语句。
如何使用
使用此模块最简单也是唯一的方法是调用react函数。 react是一个工厂函数,它查找'''''uu iter'/''''uu getitem' 从给定的iterable返回包装对象。
使用示例:
>>> from chainreaction.reactor import react >>> react("hello") >>> react([1, 2, 3]) >>> react(iter([1, 2, 3]) >>> class DictLike(dict):pass >>> react(DictLike())
可链接对象支持其包装对象的任何方法, 尝试包装它们的返回值。 按照惯例,side-effective方法只返回可链接的对象 返回用适当的包装器包装的受侧边影响的对象。 如果迭代器被传递到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
- 展开
- 从包装对象检索iterable。
- 转储
- 元素转储。
- 致畸器
- 如果包装的对象是迭代器,则为true。
- 到字符串
- 返回与“.join”((iterable中x的str(x))几乎相同的结果)。此方法始终返回str对象。str wrapped返回unwrapped,bytes或bytearray wrapped返回str converted,dict wrapped返回与“&;”连接的“key=value”对。
- foreach(f)
- 将给定的f应用于所有元素。
- 过滤器(pred)
- 选择满足给定谓词的所有元素。
- 地图(f)
- 通过应用给定的f来生成新集合。
- 所有(pred)
- 如果所有元素满足给定谓词,则为true。
- 对于任何(pred)
- 如果任何元素满足给定谓词,则为true。
- 下降时间(pred)
- 删除满足给定谓词的元素的最长前缀。
- 右下角(pred)
- 删除满足给定谓词的元素的最长后缀。
- 羚羊(pred)
- 取满足给定谓词的元素的最长前缀。
- 正确(pred)
- 取满足给定谓词的元素的最长后缀。
- mkstring(joiner=)
- 使用连接符字符串返回包装的str对象。
- 计数(pred=lambda x:true)
- 计算满足给定谓词的元素数。
- 包含(键)
- 测试此包装对象是否包含作为元素的给定键。
- 减少(f)
- 使用给定的f返回一个值(未包装)。
特定于迭代器的api
- 列表
- 返回包装好的新列表。
- 三倍
- 返回包装的新元组。
- 设置
- 返回包装的新集合。
str,字节,bytearray特定的api
- 混响硒
- 返回一个新的反向str wrapped。
序列特定API
- 累加(f)
- 返回一系列累积值。
- 倒车
- 返回一个新的反向seq wrapped。
- 排序
- 返回一个新的排序顺序包装。
- 设置
- 返回包装的新集合。
设置特定的api
- 最小值
- 返回最小值。
- 最大值
- 返回最大值。