generator vs iterator
Every generator is an iterator, but not vice versa
itarator vs itarable
-
Iterable的iter方法会返回一个Iterator, Iterator的next方法(Python 2里是next)会返回下一个迭代对象,如果迭代结束则抛出StopIteration异常。
-
Iterator自己也是一种Iterable,所以也需要实现Iterable的接口,也就是iter,这样在for当中两者都可以使用。Iterator的iter只需要返回自己就行了。
generator class
class Fib:
def __init__(self):
self.a, self.b = 0, 1
def __iter__(self):
while True:
yield self.a
self.a, self.b = self.b, self.a+self.b
f = iter(Fib())
for i in range(3):
print(next(f))
class Fib:
def __init__(self):
self.a, self.b = 0, 1
def __next__(self):
return_value = self.a
self.a, self.b = self.b, self.a+self.b
return return_value
def __iter__(self):
return self
f = iter(Fib())
for i in range(3):
print(next(f))
近期评论