1. 程式人生 > >Python基礎-----生成器函數(生產者消費者模型)

Python基礎-----生成器函數(生產者消費者模型)

生成器 while for odi 生產者消費者 繼續 time __next__ urn

#!/usr/bin/env python
# -*- coding:utf-8 -*-

# yield x相當於return 控制的是函數的返回值
# 在定義生成器函數的yield時,可以給yield賦值
# x = yield的另一個特性,接收send傳過來的值,賦給x
# send類似於__next__()方法,不過生成器剛啟動時,不能send一個不為None的值,
# 所以先要運行__next__()方法現啟用生成器。

‘‘‘
def test():
print(‘開始生產~~~‘)
fir = yield 1
print(‘第一個‘,fir)
yield 2

t = test()
re = t.__next__() #開始啟動生成器函數,re表示yield 後的值,該處代表 1
print(re) #>>> 1
res = t.send(1) #繼續調用生成器函數,並將1傳值給fir;res表示後面的yield返回值,該該處代表2
print(res) #>>> 2
‘‘‘
# 如果模擬生產包子和吃包子,可以如下:

import time
def eat(name):
print(‘我是【%s】,我要開始吃包子了~‘%name)
while True:
baozi = yield
time.sleep(1)
print(‘【%s】很開心的把%s吃掉了~‘%(name,baozi))

def product():
eat_list = [‘A‘,‘B‘,‘C‘]
for i in range(len(eat_list)):
c = eat(eat_list[i])
c.__next__()
for b in range(5):
c.send(‘包子%d‘%b)
product()

Python基礎-----生成器函數(生產者消費者模型)