生成器的机制:边读取边生成数据
如何产生生成器?看如下示例:
g = (x * 3 for x in range(0, 11))print(type(g))
执行结果:
<class 'generator'>
可以看到,g的类型是generator,也就是生成器的意思。
那么生成器如果产生数据呢?接着上面的例子来看:
g = (x * 3 for x in range(0, 11))print(type(g))print(g.__next__()) print(g.__next__())
执行如下:
<class 'generator'>03
我们可以看到,每执行一次g.__next__()就会让生成器产生一个数据(该数据是 for x in range(0, 11)产生的数据 * 3)
当产生数据的次数超过了界限会怎样呢?
g = (x * 3 for x in range(0, 11))print(type(g))print(g.__next__())print(g.__next__())print(g.__next__())print(g.__next__())print(g.__next__())print(g.__next__())print(g.__next__())print(g.__next__())print(g.__next__())print(g.__next__())print(g.__next__())print(g.__next__())
执行结果:
<class 'generator'>03 6 9 12 15 18 21 24 27 30Traceback (most recent call last): File "E:/practicemore/ddd.py", line 15, in print(g.__next__()) StopIteration
我们可以看到,报错了,抛出了StopIteration 异常。
拓展:除了使用__next__(),还可以使用next()方法,将生成器对象传入即可