gen wrapper.__name__ = func.__name__ wrapper.__dict__ = func.__dict__ wrapper.__doc__ = func.__doc__ return wrapper word_map = {} def consume_data_from_file(file_name, consumer): for line in file(file_name): consumer.send(line) @consumer def consume_words(consumer): while True: line = yield for word in (w for w in line.split() if w.strip()): consumer.send(word) @consumer 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_inner = consume_words(cons) c = consume_data_from_file('test.txt', cons_inner) print word_map example_with_deco 膳绫擎的代铝闼楝真正的数据花费者是count_words_consumer,最原始的数据临盆者是consume_data_from_file,数据的流向是主动大年夜临盆者推向花费者。不过膳绫擎第22、24行分别调用了两次next,这个可以应用一个decorator封装一下。
generator throw
- throw(type[, value[, traceback]])
在generator yield的处所抛出type类型的异常,并且返回下一?被yield的值。如不雅type类型的异常没有被捕获,那么会被传给caller。别的,如不雅generator不克不及yield新的值,那么向caller抛出StopIteration异常:
-
推荐阅读
最经典的前端面试题之一,你能答出什么幺蛾子?
本文的目标是以“输入 URL 后产生了什么”这个经典面试题为引子,写一篇既可以或许涵盖面试中大年夜部分收集试题,又可以或许将“输入 URL 后产生什么”讲得有深度的>>>详细阅读
本文标题:Python增强的生成器:协程
地址:http://www.17bianji.com/lsqh/37169.html
1/2 1