yield的用法

python中,正常的函数通常是在一个函数中进行操作,最后return,将控制权交给调用函数的地方。

yield和正常理解的函数执行不同,yield在函数中与return起到的作用类似却又不同。yield从函数中返回一个值,但控制权并未完全交出,而是在保存当前所有变量的情况下暂时地将控制权交给外面,当外面的函数继续进行迭代时,控制权又回到yield处,执行下一行代码。

由此可以看到yield存在的函数实际返回了一个GeneratorType,通过不断地迭代,调用外部的函数来处理yield还回去的结果。

实例代码如下:

1
2
3
4
5
6
7
def x():
    for i in xrange(5):
        yield i
        print 'i value ', i

for k in x():
    print 'k value ', k

代码输出结果:

k value 0
i value 0
k value 1
i value 1
k value 2
i value 2
k value 3
i value 3
k value 4
i value 4