python 关键字yield解析
python 关键字yield解析
yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator。
yield 的好处是显而易见的,把一个函数改写为一个 generator 就获得了迭代能力,比起用类的实例保存状态来计算下一个 next() 的值,不仅代码简洁,而且执行流程异常清晰
# eg_v1 建立一个列表,逐项地读取这个列表,那么这个列表就是一个可迭代对象。
>>> mylist = [1,2,3,4,5] >>> for i in mylist: ... print i ... 1 2 3 4 5
使用一个列表生成式来建立一个列表的时候,也是建立了一个可迭代的对象
>>> mylist = [x * x for x in range(5)] >>> for i in mylist: ... print i ... 0 1 4 9 16
注:使用 for .. in .. 语法的叫做一个迭代器:列表,字符串,文件等,缺点是内存开销大
生成器
生成器是可以迭代的,但是只可以读取它一次 ,因为它并不把所有的值放在内存中,它是实时地生成数据。
>>> mygenerator = (x * x for x in range(5)) >>> for i in mygenerator: ... print i ... 0 1 4 9 16
yield关键字
yield 是一个类似 return 的关键字,只是这个函数返回的是个生成器
>>> def createGenerator(): ... mylist = range(5) ... for i in mylist: ... yield i * i ... >>> >>> mygenerator = createGenerator() >>> print (mygenerator) <generator object createGenerator at 0x7fb6f3fdf820> >>> for i in mygenerator: ... print i ... 0 1 4 9 16 >>>
可以理解:当你调用这个函数的时候,函数内部的代码并不立马执行 ,这个函数只是返回一个生成器对象,使用for进行迭代的时候,执行函数内的代码