可迭代对象:实现了__iter__方法的对象,如列表,元组,字典,通过iter()来生成迭代器
迭代器:实现了__next__方法的可迭代对象,通过next()来访问
生成器:使用了yield的函数,返回迭代器
- 迭代器
例子:
class Fib: def __init__(self): self._a = 0 self._b = 1 def __iter__(self): return self def __next__(self): self._a, self._b = self._b, self._a + self._b return self._a for i, f in enumerate(Fib()): print(f) if i > 10: break a = Fib() print(next(a))
输出结果:
1
1
2
3
5
8
13
21
34
55
89
144
1
- 可迭代对象和迭代器
例子:创建迭代器
list = [1, 2, 3, 4] it = iter(list) # 创建迭代器对象 for x in it: print(x, end=" ")
输出结果:
1 2 3 4
- 生成器
例子:
#!/usr/bin/python3 import sys def fibonacci(n): # 生成器函数 - 斐波那契 a, b, counter = 0, 1, 0 while True: if (counter > n): return yield a a, b = b, a + b counter += 1 f = fibonacci(10) # f 是一个迭代器,由生成器返回生成 while True: try: print(next(f), end=" ") except StopIteration: sys.exit()
输出结果:
0 1 1 2 3 5 8 13 21 34 55