美文网首页
Python中协程(coroutine)和生成器(generat

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

作者: 逸筱幻 | 来源:发表于2018-04-27 12:14 被阅读0次

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

    • 在生成器中, yield 只对外产出值
    • 在协程中,yield能对外产出值,而且能接收通过send()方法传入值
    下面是一段生成器的代码
    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上做了拓展。能接收一些参数

    协程有四个状态

    • GEN_CREATED
    • GEN_RUNNING
    • GEN_SUSPEND
    • GEN_CLOSED

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

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

    相关文章

      网友评论

          本文标题:Python中协程(coroutine)和生成器(generat

          本文链接:https://www.haomeiwen.com/subject/hbdblftx.html