Table of contents
- iterable 是存储多个值的对象,并可以逐个返回它的值
generator defined by yield
-
itertools.cycle(iterable)vswhile True: 前者生成的 iterator 可以无限次重复遍历一个有限的 iterable,而while True 只会遍历一遍 iterable。 so1 2 3 4 5 6 7 8 9 10def myGenerator(): # define a iterable yield 1 yield 2 def loop_iterator(iterable=[]): for val in itertools.cycle(iterable): # turn to iterator yield val # this func is a generator gen = loop_iterator(iterable=myGenerator()) # create a generator next(gen)Contrast:
1 2 3 4 5 6def loop_while(iterable): while True: for val in iterable: yield val # define a generator gen = loop_while(myGenerator()) next(gen) -
yield 关键字用于 generator function 中,返回一个值,但不终止函数执行,等待下一次调用再继续 GfG-yield。 Generator function 创建一个 generator object,也就是iterable,它可以用
__next__() 方法或 for 循环遍历。 定义 generator function 只需要 yield 关键字,比较方便,而定义 iterator 需要定义__next__()和__iter__()方法 GfG-gener
iterator has next
- iterator 是实现了
__iter__()和__next__()方法的对象,而 list, tuple, dict, set 都是 iterable 对象,它们都可以调用自己的iter()方法变成一个 iterator。
for 循环遍历 iterable 时其实创建了一个iterator,每次循环执行__next__()方法 w3school
|
|