python 协程

python 协程

python yield /send

# 控制汽车速度
import time 
def car():
    speed = 0 # 汽车初速度为0 
    while True:
        time.sleep(0.5)
        f = yield speed
        if f ==-1: 
            speed -= 10
        if f == 1:
            speed += 10
if __name__ == '__main__':
    c = car()
    for i in range(10):
        if i ==0:
            speed = c.send(None)
        if speed >40:
            speed = c.send(-1)
            print("speed now {}".format(speed))
            
        else:
            speed = c.send(1)
            print("speed now {}".format(speed))

运行结果入下

speed now 10
speed now 20
speed now 30
speed now 40
speed now 50
speed now 40
speed now 50
speed now 40
speed now 50
speed now 40

如果普通函数中出现yield关键字,那么该函数就是一个生成器,生成器最大的特点就是可以接受外部传入的一个变量,并根据变量内容计算结果返回。上例中,通过send(-1)控制speed速度增加减小。

yield /from

yield from 解析了range对象,将其中每一个item返回了。 我们看下面的斐波那契数列函数

#斐波那契数列

def a (max):
    front = 0
    behind = 1
    while True:
        c = front+behind
        if c > max:
            break
        yield c
        front = behind
        behind = c

def f_wrapper2(fun_iterable):
    print('start')
    yield from fun_iterable  #注意此处必须是一个可生成对象,使用yield from 代替 for 循环
    print('end')
wrap = f_wrapper2(a(100)) #将斐波那契数列放入到f_wrapper2
for i in wrap:
    print(i,end=' ')
posted @ 2021-06-09 15:21  GWZHG  阅读(67)  评论(0)    收藏  举报