zoukankan      html  css  js  c++  java
  • python中的yield和return—迭代器和生成器

    摘要

    yield和return有什么区别?什么事生成器?什么又是迭代器?他们都有什么作用?简单理解的话yield=return,返回函数体处理结果的!yield本身是一个生成器,所以使用return返回的是我们常见的一些object(eg:list、dict、等),使用yield返回的是一个迭代器对象!

    yield和return

    之前一篇文章 【开启Scrapy爬虫之路】 中,处理item时,定义函数返回值用的yield,有人问yield是干嘛的,什么意思?

    相同点: 都是定义函数过程中返回值

    不同点:

    • yield是暂停函数,return是结束函数; 即yield返回值后继续执行函数体内代码,return返回值后不再执行函数体内代码
    • yield返回的是一个迭代器(yield本身是生成器-生成器是用来生成迭代器的);return返回的是正常可迭代对象(list,set,dict等具有实际内存地址的存储对象)
                          # debug测试   def   f1   (   )   :   print   (   "第1次暂停"   )   yield   '第1次访问返回的结果'   # yield 暂停函数的调用,返回一个结果   print   (   "第2次暂停"   )   yield   '第2次访问返回的结果'   return   100   # reutrun结束函数的调用   print   (   'return直接结束,此句不执行'   )   

    生成器

    如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。

    要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator:

                          >>   >  L  =   [  x  *  x  for  x  in   range   (   10   )   ]   >>   >  L  [   0   ,   1   ,   4   ,   9   ,   16   ,   25   ,   36   ,   49   ,   64   ,   81   ]   >>   >  g  =   (  x  *  x  for  x  in   range   (   10   )   )   >>   >  g  <  generator  object   <  genexpr  >  at  0x1022ef630   >   

    在这里插入图片描述 
    yield 返回的是一个生成器(看成迭代器更好理解) 
    在这里插入图片描述

    迭代器

    可以直接作用于for循环的对象统称为可迭代对象:Iterable

    • 一类是集合数据类型,如list、tuple、dict、set、str等;

    • 一类是generator,包括生成器和带yield的generator function 
      在这里插入图片描述

    迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。

    迭代器有两个基本的方法:创建迭代器iter() 和 访问迭代器next()。

    联系

    yield 是一个生成器函数,返回的是一个迭代器(有说法是返回的是生成器,我感觉说成迭代器更适合),

    最近思维混乱,然后写了好几篇博客但是感觉都不太好!都变成草稿了,剑桥英语这一篇本来也想存为草稿的,奈何我还是想在 “GEEK+”原创·博主大赛 挣扎下,所以发出来拉个票,后续那天清醒了再过来修改完善下,麻烦文末投票链接帮忙助力一下

    原创不易,谢谢大家支持

    再这里列了一些资料,有需要可以自己先研究下!!

    【Python3 迭代器与生成器】 
    【迭代器-百度百科】 
    【python中yield的用法详解——最简单,最清晰的解释】 
    【生成器——廖雪峰】 
    【迭代器——廖雪峰】


    写在最后的拉票环节 
    最近参加了CSDN官方组织的 “GEEK+”原创·博主大赛 
    历经重重筛选,终于上榜TOP 50 
    原创不易,帮忙投个免费的票 
    支持一下: 点击投票 
    谢谢大家!!!

  • 相关阅读:
    国内网页登录onedrive
    MySQL查询语法
    python 优矿自动化交易
    Python爬取代理ip
    Python获取中国证券报最新资讯
    python推荐淘宝物美价廉商品
    python PIL比较图片像素
    使用pyinstaller打包Python应用,生成EXE执行文件
    Python可视化----------matplotlib.pylot
    panda库------对数据进行操作---合并,转换,拼接
  • 原文地址:https://www.cnblogs.com/huilixieqi/p/13754786.html
Copyright © 2011-2022 走看看