1、from collections import Iterable, Iterator # 引入包# 将列表生成式的方括号改成圆括号,返回结果就不是列表了,而是一个生成器。g = (i for i in range(10))print(g)
2、print(isinstance(g, Iterator)) # 生成器属于迭代器。print(isinstan艘早祓胂ce(g, Iterable)) # 生成器属于可迭代对象。print(isinstance('good', Iterator)) # 字符串等容器属于可迭代对象,但是不属于迭代器。
3、# 生成器每次被访问都会记录自己被访问的位置next(g) # 通过next()访问生成器中的下一个元素print(next(g))
4、# for-in遍历生成器会直接从记录的位置访问到最后for i in g: print(i, end=' ')print()
5、# next(g) # 访问到最后一个,就不能在访问了,否则崩溃g = (i for i in range(10))# 使用next()访问生成器中特定数量的数据# 生成器,访问一个加载一个,不访问不加载:俗称懒加载或惰性加载。for i in range(6): print(next(g))
6、# 利用函数创建生成器def back_genarator(n): print(111111) for i in range(n+1): print(2222222) yield i print(3333333)
7、# 生成器记录的是算法规则,依次加载# 调用next()才开始执行生成器粝简肯惧内部的代码,每调用一次next,代码会走到yield,将结果抛出,然后代码暂停# 如果已经访问到最后一个yield,就代码生成器结束了,不能再次调用next()g = back_genarator(3)print(next(g))print(next(g))