作家
登录

Python Yield Generator详解

作者: 来源: 2017-07-28 13:19:27 阅读 我要评论

  
  •  
  •     for i in (x*x for x in range(RANGE_NUM)): # 第二种办法:对generator进行迭代 
  •  
  •         # do sth for example 
  •  
  •         print i  
  • 在膳绫擎的代铝闼楝两个for语句输出是一样的,代码字面上看来也就是中括号与小括号的差别。但这点差别差别是很大年夜的,第一种办法返回值是一个列表,第二个办法返回的是一个generator对象。跟着RANGE_NUM的变大年夜,第一种办法返回的列表也越大年夜,占用的内存也越大年夜;然则对于第二种办法没有任何差别。

    1. def fib(): 
    2.  
    3.     a, b = 1, 1 
    4.  
    5.     while True
    6.  
    7.         yield a 
    8.  
    9.         a, b = b, a+b  

    这个generator拥有生成无数多“返回值”的才能,应用者可以本身决定什么时刻停止迭代。

    应用处景一:

    Generator可用于产生数据流, generator并不急速产生返回值,而是比及被须要的时刻才会产生返回值,相当于一个主动拉取的过程(pull),比如如今有一个日记文件,每行产生一笔记录,对于每一笔记录,不合部分的人可能处理方法不合,然则我们可以供给一个公用的、按需生成的数据流。

    1. def gen_data_from_file(file_name): 
    2.  
    3.     for line in file(file_name): 
    4.  
    5.         yield line 
    6.  
    7.   
    8.  
    9. def gen_words(line): 
    10.  
    11.     for word in (w for w in line.split() if w.strip()): 
    12.  
    13.         yield word 
    14.  
    15.   
    16.  
    17. def count_words(file_name): 
    18.  
    19.     word_map = {} 
    20.  
    21.     for line in gen_data_from_file(file_name): 
    22.  
    23.         for word in gen_words(line): 
    24.  
    25.             if word not in word_map: 
    26.  
    27.                 word_map[word] = 0 
    28.  
    29.             word_map[word] += 1 
    30.  
    31.     return word_map 
    32.  
    33.   
    34.  
    35. def count_total_chars(file_name): 
    36.  

        推荐阅读

        化繁为简 海云捷迅为企业提供应用OpenStack新“姿势”

      在版本进级方面,OpenStack每半年就会宣布一个版本,这是它的立异过程,但企业客户更多求稳,不会过快的进行迭代进级。海云捷迅底层技巧是每两年一个版本,首版是基于OpenStack的E版本,二版本是H版,三版本是基于社>>>详细阅读


      本文标题:Python Yield Generator详解

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

    关键词: 探索发现

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

    网友点评
    自媒体专栏

    评论

    热度

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