作家
登录

Python增强的生成器:协程

作者: 来源: 2017-09-06 10:56:13 阅读 我要评论

 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

    1. throw(type[, value[, traceback]]) 

    在generator yield的处所抛出type类型的异常,并且返回下一?被yield的值。如不雅type类型的异常没有被捕获,那么会被传给caller。别的,如不雅generator不克不及yield新的值,那么向caller抛出StopIteration异常:


    1.   推荐阅读

        最经典的前端面试题之一,你能答出什么幺蛾子?

      本文的目标是以“输入 URL 后产生了什么”这个经典面试题为引子,写一篇既可以或许涵盖面试中大年夜部分收集试题,又可以或许将“输入 URL 后产生什么”讲得有深度的>>>详细阅读


      本文标题:Python增强的生成器:协程

      地址:http://www.17bianji.com/lsqh/37169.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)