带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

 

posted @ 2016-12-01 22:23  dshed  阅读(173)  评论(0)    收藏  举报