yield语句是从Python2.2开始引入的
它只能用在一个generator(生成器)中,作为一个语句来执行并返回结果
当调用改generator的next方法时,会从上次的yield语句开始继续执行....

在python2.5中对yield进行了增强:
1.yield不再是一个语句,而是一个expression(表达式)了,这样我们就可以这样来使用了:  
  y = yield 6
2.增加了一个send(msg)函数:
  当执行send(msg)函数后,msg参数将会替代整个yield x表达式的值
  而next方法则相当于是执行了send(None)函数
  send和next函数其实都是有返回值的,是下个yield的参数值(注意:不是整个yield表达式的值)。
3.增加了throw GeneratorExit方法,可以用来中断该generator方法
4.增加了close()方法,其实和throw的作用差不多。


通过下面这个列子,大概能明白yield的用法了:
# -*- coding: cp936 -*-

def gen():
    for i in xrange(5):
        print 'i: %d' % i
        m = yield i
        print 'm: ', m

g = gen()
n = g.next()
print 'g: %d' % n
n = g.next()
print 'g: %d' % n
n = g.send(6)
print 'g: %d' % n
n = g.send(None)
print 'g: %d' % n
g.throw(GeneratorExit)
n = g.next()