社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
协程和生成器都使用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
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!