两点须要留意:
- next() 等价于 send(None)
- 第一次调用时,须要应用next()语句或是send(None),不克不及应用send发送一个非None的值,不然会掉足的,因为没有Python yield语句来接收这个值。
应用处景
当generator可以接法术据(在大年夜挂起状况恢复的时刻) 而不仅仅是返回数据时, generator就有了花费数据(push)的才能。下面的例子来自这里:
- word_map = {}
- def consume_data_from_file(file_name, consumer):
- for line in file(file_name):
- consumer.send(line)
- def consume_words(consumer):
- while True:
- line = yield
- for word in (w for w in line.split() if w.strip()):
- consumer.send(word)
- def count_words_consumer():
- while True:
- word = yield
- if word not in word_map:
- word_map[word] = 0
- word_map[word] += 1
- print word_map
- if __name__ == '__main__':
- cons = count_words_consumer()
- cons.next()
- cons_inner = consume_words(cons)
- cons_inner.next()
- c = consume_data_from_file('test.txt', cons_inner)
- print word_map
修改后的代码:
- def consumer(func):
- def wrapper(*args,**kw):
- gen = func(*args, **kw)
- gen.next()
- return
推荐阅读
本文的目标是以“输入 URL 后产生了什么”这个经典面试题为引子,写一篇既可以或许涵盖面试中大年夜部分收集试题,又可以或许将“输入 URL 后产生什么”讲得有深度的>>>详细阅读
本文标题:Python增强的生成器:协程
地址:http://www.17bianji.com/lsqh/37169.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示