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