yield与gen.coroutine

def d():
    for i in range(2):
        yield i

def b():
    yield d()
    print("b")
    yield "bb"

def a():
    g_b = b()
    print(g_b)
    g_d = next(g_b)
    print(g_d)
    v_d = next(g_d)
    print(v_d) # 0
    v_d = next(g_d)
    print(v_d) # 1
    b_next = next(g_b)
    print(b_next) # bb

if __name__ == "__main__":
    a()
#---输出
# <generator object b at 0x00000000033A3E60>
# <generator object d at 0x000000000389F150>
# 0
# 1
# b
# bb

----------------------
def d():
    for i in range(2):
        yield i

def b():
    yield d()
    print("b")

def a():
    g_b = b()
    print(g_b) # <generator object b at 0x00000000033A3E60>
    g_d = next(g_b)
    print(g_d) # <generator object d at 0x000000000389F150>
    v_d = next(g_d)
    print(v_d) # 0
    v_d = next(g_d)
    print(v_d) # 1
    b_next = next(g_b)
    print(b_next)
#---输出
<generator object b at 0x00000000033A3E60>
<generator object d at 0x000000000349F150>
0
1
b
Traceback (most recent call last):
  File "E:\eclipse-workspace\demo_python\demo\yield_demo.py", line 49, in <module>
    a()
  File "E:\eclipse-workspace\demo_python\demo\yield_demo.py", line 19, in a
    b_next = next(g_b)
StopIteration
----------------------

def d():
    for i in range(2):
        yield i

def b():
    yield d()
    print("b")
    yield

def a():
    g_b = b()
    print(g_b) # <generator object b at 0x00000000033A3E60>
    g_d = next(g_b)
    print(g_d) # <generator object d at 0x000000000389F150>
    v_d = next(g_d)
    print(v_d) # 0
    v_d = next(g_d)
    print(v_d) # 1
    b_next = next(g_b)
    print(b_next)
#---输出
<generator object b at 0x00000000033A3E60>
<generator object d at 0x000000000349F150>
0
1
b
None

--------------
@gen.coroutine
def gen_d():
    for i in range(10):
        raise gen.Return(i)

@gen.coroutine
def gen_b():
    v = yield gen_d()
    print("b")

@gen.coroutine
def gen_a():
    var = yield gen_b()
    print(var)

if __name__ == "__main__":
    ioloop.IOLoop.current().run_sync(gen_a)
--输出
b
None
-----------------------------
#@gen.coroutine
def gen_d():
    for i in range(10):
        return i

@gen.coroutine
def gen_b():
    v = yield gen_d()
    print("b")

@gen.coroutine
def gen_a():
    var = yield gen_b()
    print(var)

if __name__ == "__main__":
    ioloop.IOLoop.current().run_sync(gen_a)
--输出
0

 

Guess you like

Origin www.cnblogs.com/wenlin-gk/p/10978897.html