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