简介
yield关键字返回一个生成器(generator),生成器又是一个可迭代的对象(iterables).
几个有关概念
迭代器
通过迭代的方式进行遍历,而不用像数组一般通过位置进行索引.迭代器一般来说可以通过next()方法获取下一个,进行顺序的遍历,也可以通过for item in Iterator结构来遍历迭代器中的元素.
生成器
生成器实现了迭代器接口,但是不同之处在于,其产生的值并不是一次性的装入内存,而是在需要时动态生成item.是一个动态生成元素的数据结构,而非静态生成.可以将生成器理解为一个动态生成元素的list.
yield作用
- yield类似return,会返回一个生成器对象,只有当该生成器对象需要被访问时,才会生成计算结果.
yield用法
通过循环生成generator
def create_generator():
for i in range(3):
yield i*i # 返回一个generator对象,对象中的元素由for循环赋值
mygenerator = create_generator()
for i in mygenerator:#遍历生成器
print(i)
#output:0,1,2
yield的好处
- 动态生成数据,随取随生成,不用一次性全部将元素放在内存,减少内存消耗
- 消耗低
- yield关键字不同于return,其返回generator对象之后并不会停止后续语句的运行