天天看点

17 yield用法

yield 生成器

def fib(max):
    n,a,b=0,0,1
    l=[]
    while n<max:
        #print(b)
        yield b
        l.append(b)
        a,b=b,a+b
        n+=1
r=fib(10)
print(r.__next__())
print(r.__next__())
print(r.__next__())
           

使用.send(val)传入一个值到yield

def consumer(name):
    while True:
        print('%s go to buy car'%(name))
        c=yield
        print('%s buyed a car of %s'%(name,c))

c1=consumer('Bao')
c1.__next__()
c1.send('Benz')
           

简单的生产、消费

def consumer(name):
    while True:
        print('%s go to buy car'%(name))
        c=yield
        print('%s buyed a car of %s'%(name,c))
        
def producer(car):
    c1=consumer('Bao')
    c1.__next__()
    for i in car:
        c1.send(i)
producer(['Benz','toyota','BMW'])
输出结果:
Bao go to buy car
Bao buyed a car of Benz
Bao go to buy car
Bao buyed a car of toyota
Bao go to buy car
Bao buyed a car of BMW
Bao go to buy car