语言-Python-yield的使用

可迭代对象(iterable)

当我们用一个列表生成式来建立一个列表时,就建立了一个可迭代对象。

>>> mylist = [x*x for x in range(3)]
>>> for i in mylist :
...    print(i)
0
1
4

所有可以使用for...in...语法的叫做一个迭代器:列表,字符串,文件。 but,读取到的元素全部都存放在了内存中,如果有大量的数据,将会很不方便。 for x in range(x)生成一个list for x in xrange(x)生成一个iterable

生成器generator

生成器是可以迭代的,但是并不会存储数据。因此我们只能读取他一次。

>>> mylist = (x*x for x in range(3))
>>> for i in mylist :
...    print(i)
0
1
4

[]换成了(),但是我们只能使用一次。再次使用的话将得不到任何结果。

yield关键字

yield是一个类似return的关键字,只是这个函数和返回的是一个生成器 当我们调用返回生成器的函数的时候,函数内部的代码并不会立马执行,这个函数只是返回一个生成器对象。 每一轮迭代函数都会执行,从开始到yield,然后返回yield后的值作为第一次迭代的返回值。下一次迭代时,将从yield的下一行开始进行

reference

Table of Contents