gpt4 book ai didi

python - “str_iterator”对象不可调用

转载 作者:行者123 更新时间:2023-11-28 20:23:32 25 4
gpt4 key购买 nike

我在搞乱 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。

最佳答案

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

关于python - “str_iterator”对象不可调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20343291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com