g = ( i for i in range(10) ) print(g.__next__()) print(g.__next__()) print(g.__next__()) print(g.__next__())
生成器特性:python
g = ( i for i in range(10) ) for gen in g: print(gen)
>>> from collections import Iterable >>> isinstance([], Iterable) True >>> isinstance({}, Iterable) True >>> isinstance('abc', Iterable) True >>> isinstance((x for x in range(10)), Iterable) True >>> isinstance(100, Iterable) False
迭代器的定义:算法
**能够被next()函数调用并不断返回下一个值的对象称为迭代器(Iterator)。函数
>>> from collections import Iterator >>> isinstance((x for x in range(10)), Iterator) True >>> isinstance([], Iterator) False >>> isinstance({}, Iterator) False >>> isinstance('string', Iterator) False
生成器都是迭代器对象,但list、dict、str虽然是可迭代对象,却不是迭代器spa
for x in [1,2,3,4,5]: pass 实际彻底等价于: it = iter([1,2,3,4,5]) while True: try: # 得到下一个值: x = next(it) except StopIteration: # 遇到StopIteration就退出循环 break