我尝试手动定义一个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