Python中协程(coroutine)和生成器(generat

2018-04-27  本文已影响0人  逸筱幻

协程和生成器都使用yield关键字。但是协程更像是对生成器语法的一些扩展

下面是一段生成器的代码
def simple_generator():
  c = yield 1
  if c is None:
    print("c is None")

# 代码运行后,返回结果为
# generator = simple_generator()
# next(generator) -> 1
# next(generator) -> c is None

可以发现生成器语法中, generator不返回值。
上面的代码等价于

def simple_generator():
  yield 1
下面是一段协程的代码
def simple_coro2(a):
  print("->  Started: a =", a)
  b = yield a
  print("-> Received: b: =", b)
  c = yield a + b
  print("-> Received: c=", c)
当前代码的执行结果

可以看到在生成器中,每次调用send()方法时,yield语句对外返回yield右侧的值,再将输入的值赋值给左侧的变量。所以协程在yield上做了拓展。能接收一些参数

协程有四个状态

每个协程在使用时,必须进行初始化。否则抛出异常

TypeError: can't send non-None value to a just-started generator

上一篇下一篇

猜你喜欢

热点阅读