作家
登录

Python增强的生成器:协程

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

  •  
  • after resume 0  
  • 两点须要留意:

    1. next() 等价于 send(None)
    2. 第一次调用时,须要应用next()语句或是send(None),不克不及应用send发送一个非None的值,不然会掉足的,因为没有Python yield语句来接收这个值。

    应用处景

    当generator可以接法术据(在大年夜挂起状况恢复的时刻) 而不仅仅是返回数据时, generator就有了花费数据(push)的才能。下面的例子来自这里:

    1. word_map = {} 
    2.  
    3. def consume_data_from_file(file_name, consumer): 
    4.  
    5.     for line in file(file_name): 
    6.  
    7.         consumer.send(line)      
    8.  
    9. def consume_words(consumer): 
    10.  
    11.     while True
    12.  
    13.         line = yield 
    14.  
    15.         for word in (w for w in line.split() if w.strip()): 
    16.  
    17.             consumer.send(word)      
    18.  
    19. def count_words_consumer(): 
    20.  
    21.     while True
    22.  
    23.         word  = yield 
    24.  
    25.         if word not in word_map: 
    26.  
    27.             word_map[word] = 0 
    28.  
    29.         word_map[word] += 1 
    30.  
    31.     print word_map      
    32.  
    33. if __name__ == '__main__'
    34.  
    35.     cons = count_words_consumer() 
    36.  
    37.     cons.next() 
    38.  
    39.     cons_inner = consume_words(cons) 
    40.  
    41.     cons_inner.next() 
    42.  
    43.     c = consume_data_from_file('test.txt', cons_inner) 
    44.  
    45.     print word_map  

    修改后的代码:

    1. def consumer(func): 
    2.  
    3.     def wrapper(*args,**kw): 
    4.  
    5.         gen = func(*args, **kw) 
    6.  
    7.         gen.next() 
    8.  
    9.         return

        推荐阅读

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

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


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

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

    关键词: 探索发现

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

    网友点评
    自媒体专栏

    评论

    热度

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