带yield语句的函数执行流程
例:
def f():
print 'generator'
m = yield [1,2,90]
print 'got the object : ',m
yield
o = f() (1)
outVal = o.next() (2)
o.send('abc') (3)
o.next() (4)
首先注意,一个函数中存在yield语句,那么该函数就是一个生成器(Generator)
语句(1)调用f()函数获得一个生成器,赋值给o
语句(2)执行生成器的next操作,对应的在f()中的流程是:先print 'generator',然后将yield后边的值[1,2,90]作为返回值返回,也就是赋值给了outVal,最后暂停在了这个yield语句上
语句(3)执行生成器的send操作,将'abc'作为参数发送给生成器,在f()中是从中断的'm = yield [1,2,90]'开始执行,并将'abc'赋值给m,接着执行下一句"print 'got the object : ',m",最后暂停下一条yield语句上
语句(4)执行next操作,生成器从中断的yield语句开始执行,由于之后再没有yield语句了,所以生成器宣告终止,抛出StopIteration
浙公网安备 33010602011771号