协同程序
生成器可用于实现协同程序:
# create and advance generator to the first yield
def coroutine(func):
def start(*args,**kwargs):
cr = func(*args,**kwargs)
next(cr)
return cr
return start
# example coroutine
@coroutine
def adder(sum = 0):
while True:
x = yield sum
sum += x
# example use
s = adder()
s.send(1) # 1
s.send(2) # 3
协程通常用于实现状态机,因为它们主要用于创建需要状态正常运行的单方法过程。它们在现有状态下运行并返回在完成操作时获得的值。