Python 定义的透视迭代器,获取错误"'list' object is not callable"



我尝试手动定义一个peek迭代器类,peek函数只返回迭代器指针值,但不继续前进。生成器类有next()和has_next()函数,PeekIterator类我添加了peek()函数,但是当调用peek函数时,它得到错误:

Traceback (most recent call last):
  File "iterater.py", line 63, in <module>
    test.peek()
TypeError: 'list' object is not callable

你能帮忙检查一下这里有什么问题吗?谢谢!

class generator:
    def __init__(self, n):
        self.n = n
        self.i = 0
    def __iter__(self):
        return self
    def next(self):
        if self.has_next():
            i = self.i
            self.i += 1
            return i
        else:
            print "there is NO next value."
            return None
            #raise StopIteration()
    def has_next(self):
        if self.i >= self.n:
            return False
        else:
            return True
class PeekIterator:
    def __init__(self, generator):
        self.peek = []
        self.generator = generator
    def __iter__(self):
        return self
    def peek(self):
        if self.peek == []:
            if self.has_next():
                cur = self.generator.next()
                self.peek.append(cur)
                print "cur: ", cur
                return cur
        else:
            return self.peek[-1]
    def has_next(self):
        if not self.generator.has_next() and not self.peek:
            return False
        else:
            return True
    def get_next(self):
        if not self.peek:
            if self.has_next():
                return self.generator.next()
        else:
            ret = self.peek[-1]
            self.peek.pop()
            return ret
gen = generator(5)
test = PeekIterator(gen)
print test.has_next()
print test.get_next()
print test.get_next()
test.peek()

~

class PeekIterator:
    def __init__(self, generator):
        self.peek = []
#...
    def peek(self):

这里有两个peek -一个方法,一个列表。一个会覆盖另一个。当您执行test.peek()时,Python认为您引用的是列表而不是方法。

考虑将其中一个重命名为其他东西。例:将list改为self.items

最新更新