【发布时间】:2013-12-03 05:05:47
【问题描述】:
我在搞乱pyxshell,这是一个基本上为 itertools 提供一些语法糖的库。
核心类是PipeLine,它在其构造函数中传递了一个迭代器,当它的迭代器被调用时,它调用传递的迭代器:
class PipeLine(object):
def __init__(self, coro_func):
self.coro_func = coro_func
def __iter__(self):
return self.coro_func()
使用示例:
>>> def summer(stdin):
... sum = 0
... for item in stdin:
... sum += item
... yield sum
>>> pipeline = PipeLine(lambda: iter([1, 2, 3, 4])) | PipeLine(summer)
>>> pipeline
<PipeLine: <lambda> | summer>
>>> for item in pipeline:
... print(item)
1
3
6
10
所以,我想在字符串中的字符序列上构造一个 PipeLine。 Python中的字符串本质上是可迭代的,所以我认为这没问题。但我期望的工作没有。这个:
PipeLine(iter(src))
抛出错误:
TypeError: 'str_iterator' object is not callable
最终,我尝试了:
PipeLine(src.__iter__)
而且成功了。
我的问题:为什么“PipeLine(iter(src))”不起作用?根据我对 Python 的理解,它应该。我不明白什么?
在 Linux Mint 12.0 上运行 CPython 3.2。
【问题讨论】:
-
我收到
TypeError: unsupported operand type(s) for |: 'PipeLine' and 'PipeLine'
标签: python python-3.x iterator