標籤:
import random def get_data(): """返回0到9之間的3個隨機數""" return random.sample(range(10), 3) def consume(): """顯示每次傳入的整數列表的動態平均值""" running_sum = 0 data_items_seen = 0 while True: data = yield data_items_seen += len(data) running_sum += sum(data) print(‘The running average is {}‘.format(running_sum / float(data_items_seen))) def produce(consumer): """產生序列集合,傳遞給消費函數(consumer)""" while True: data = get_data() print(‘Produced {}‘.format(data)) consumer.send(data) yield if __name__ == ‘__main__‘: consumer = consume()#啟動產生器 consumer.send(None) producer = produce(consumer) for _ in range(10): print(‘Producing...‘) next(producer)
對比:yield作為語句還是運算式。
import random def get_data(): """返回0到9之間的3個隨機數""" return random.sample(range(10), 3) def consume(data): """顯示每次傳入的整數列表的動態平均值""" running_sum = 0 data_items_seen = 0 while True: data = yield data """內部掛起產生器,yield作為運算式而不是語句""" """產生器運行時,yield返回一個值,就是外部通過send方法發送的值""" data_items_seen += len(data) running_sum += sum(data) print(‘The running average is {}‘.format(running_sum / float(data_items_seen))) def produce(consumer): """產生序列集合,傳遞給消費函數(consumer)""" while True: data = get_data() print(‘Produced {}‘.format(data)) consumer.send(data) yield if __name__ == ‘__main__‘: consumer = consume(0) consumer.send(None) producer = produce(consumer) for _ in range(10): print(‘Producing...‘) next(producer)
View Code
Python產生器的經典程式