Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ';str#u迭代器';对象不可调用_Python_Python 3.x_Iterator - Fatal编程技术网

Python ';str#u迭代器';对象不可调用

Python ';str#u迭代器';对象不可调用,python,python-3.x,iterator,Python,Python 3.x,Iterator,我在胡闹,这是一个基本上为itertools提供一些语法糖的库 核心类是PipeLine,在其构造函数中传递一个迭代器,当调用迭代器时调用传递的迭代器: class PipeLine(object): def __init__(self, coro_func): self.coro_func = coro_func def __iter__(self): return self.coro_func() 正在使用的it示例: >>&

我在胡闹,这是一个基本上为itertools提供一些语法糖的库

核心类是PipeLine,在其构造函数中传递一个迭代器,当调用迭代器时调用传递的迭代器:

class PipeLine(object):

    def __init__(self, coro_func):
        self.coro_func = coro_func

    def __iter__(self):
        return self.coro_func()
正在使用的it示例:

>>> 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
抛出一个错误:

TypeError: 'str_iterator' object is not callable
最后,我尝试:

PipeLine(src.__iter__)
这起作用了

我的问题:为什么“管道(iter(src))不起作用?从我对Python的理解来看,它应该是。我不明白什么


在Linux Mint 12.0上运行CPython 3.2。

您没有看到示例函数在
iter
调用周围放置
lambda
管道
需要传递一个创建迭代器的函数,而不是直接创建迭代器对象
iter(src)
是一个迭代器,而不是一个函数。

从您展示的代码中,很明显,
管道
构造函数不采用iterable参数:它需要一个0参数函数。事实上,请看您给出的工作示例:

pipeline = PipeLine(lambda: iter([1, 2, 3, 4]))
                    ^^^^^^
参见
lambda
?该示例没有直接传递iter(some_list),而是传递了一个无参数函数,返回迭代器

所以想必

PipeLine(lambda: iter(src))

也可以为您工作。

我得到
TypeError:不支持的|操作数类型:'PipeLine'和'PipeLine'
PipeLine(lambda: iter(src))