協同程式

生成器可用於實現協同程式:

# 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

協程通常用於實現狀態機,因為它們主要用於建立需要狀態正常執行的單方法過程。它們在現有狀態下執行並返回在完成操作時獲得的值。