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