在使用Python迭代器时出现错误:
class Fibs:
def __init__(self):
self.a = 0
self.b = 1
def next(self):
self.a,self.b = self.b,self.a + self.b
return self.a
def __iter__(self):
return self
fibs = Fibs()
for f in fibs:
if f > 1000:
print(f)
break
Traceback (most recent call last):
File "
for f in fibs:
TypeError: iter() returned non-iterator of type 'Fibs'
我使用的python的版本是3.0,在Python3.0中迭代器的规则原来是发生了一些变化的。在新的迭代器规则中,迭代器对象应该实现__next__方法,而不是next。而新的内建函数next可以用于访问这个方法。
class Fibs:
def __init__(self):
self.a = 0
self.b = 1
def __next__(self):
self.a,self.b = self.b,self.a + self.b
return self.a
def __iter__(self):
return self
fibs = Fibs()
for f in fibs:
if f > 1000:
print(f)
break
1597