生成器是一种特殊的迭代器,它不会把结果保存在一个系列中,而是保存生成器的状态,在每次进行迭代时返回一个值,直到遇到StopIteration异常结束。
为了从生成器获取下一个值,我们使用next()方法,也可以用for语句,就像使用迭代器一样对它
def simple_generator_function():
yield 1
yield 2
yield 3
myGenerator = simple_generator_function()
next(myGenerator)
output :1
next(myGenerator)
ouput:2
for value in simple_generator_function():
print(value)
output:
1
2
3
在一个生成器中,如果没有return,则默认执行到函数完毕时返回StopIteration,如果遇到return,如果在执行过程中 return,则直接抛出 StopIteration 终止迭代。
这里需要指出的是,凡是可作用于for循环的对象都是Iterable类型;凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。
网友评论