首先,正常使用List接收数据,函数normal例子如下:
>>> def normal(n): ... ls=[] ... for i in range(n): ... ls.append(i) ... return ls
使用for循环遍历List数据,如下:
>>> for i in normal(10): ... i ...#结果如下: 0 1 2 3 4 5 6 7 8 9
这次加入yield关键字,并去掉return,函数yieldDemo例子如下:
>>> def yieldDemo(n): ... ls=[] ... for i in range(n): ... ls.append(i) ... yield ls
使用for循环遍历List数据,如下:
>>> for i in yieldDemo(10): ... i ...#结果如下: [0] [0, 1] [0, 1, 2] [0, 1, 2, 3] [0, 1, 2, 3, 4] [0, 1, 2, 3, 4, 5] [0, 1, 2, 3, 4, 5, 6] [0, 1, 2, 3, 4, 5, 6, 7] [0, 1, 2, 3, 4, 5, 6, 7, 8] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]从上可知,yield 具有return的功能,但和return 不同的是,return 返回数值后,不可能再次进入函数,并接着进行下一次循环!!!
returnDemo例子如下:
>>> def returnDemo(n): ... ls=[] ... for i in range(n): ... ls.append(i) ... return ls
使用for循环遍历List数据,如下:
>>> for i in returnDemo(10): ... i ... #结果如下: 0
除此之外,我们还发现,使用即使已经遍历了yieldDemo(10),但返回竟然是列表类型; 我们通过查看yieldDemo(10)的类型,可知yieldDemo(10)返回的数据类型为“”生成器“”
>>> type(yieldDemo(10))此时,如果需要遍历显示10000000000000条数据时,使用列表接收就太费内存了!!!!
因此可以使用yield,例子如下:
10条数据为例。。。。。
>>> def yieldDemo2(n): ... for i in range(n): ... yield i ... >>> for i in yieldDemo2(10): ... i ... 0 1 2 3 4 5 6 7 8 9
此时,每一次for循环,都会把数值输出,而不是存储在列表类型中,是不是更节省存储空间呢??
yield 的使用远不止如此,只是拙见!!有问题欢迎留言讨论。



