专栏首页诡途的python路python中的yield和return—迭代器和生成器

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的用法详解——最简单,最清晰的解释】 【生成器——廖雪峰】 【迭代器——廖雪峰】

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 一文带你了解Python爬虫(二)——四种常见基础爬虫方法介绍

    –Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库 –urllib还是非常不方便的,而...

    诡途
  • selenium爬虫相关报错解决

    大概意思就是此参数是已经弃用的, 原来的参数chrome_options是被新的参数options替换了;

    诡途
  • (新)关于修改window.navigator.webdriver代码失效问题

    ②关于chrome版本迭代后,代码失效问题解决方案的文章链接 《关于修改window.navigator.webdriver代码失效问题》

    诡途
  • PHP-5.5新特性之yield

    在PHP5.5.0版本中,新增了生成器 (Generators) 特性,用于简化实现迭代器接口 (Iterator) 创建简单的迭代器的复杂性。

    用户2131907
  • 弄懂这 6 个问题,拿下 Python 生成器!

    施工计划第17篇。公众号真正做技术写作的本来就少,能够从一而终,始终坚持下去的,更是凤毛麟角,我会向我心中那些正真在做技术分享的前辈们学习,争取早日加入这类俱乐...

    double
  • Python3中的生成器进阶(send/close/throw)

    随着互联网的发展,C10K的并发已经不能满足日常需要,于是产生了新的挑战,即C10M问题:如何利用8核CPU,64G内存,在10gbps的网络上保持1000万的...

    编程思录
  • 生成器

    三、从第二次迭代开始,每一次迭代会从上一次迭代返回结果的位置开始往下执行代码,遇到yield后返回迭代结果并保留生成器状态再退出。

    py3study
  • 每个程序员和设计师必做的10项运动

    防止肌肉和颈部麻痹的基本伸展动作。这套舒展动作不但有助于保持体型,还能修复突出的颈椎。

    哲洛不闹
  • 每个程序员和设计师必做的10项运动

    防止肌肉和颈部麻痹的基本伸展动作。这套舒展动作不但有助于保持体型,还能修复突出的颈椎。

    哲洛不闹
  • tf.pad精准理解

    水球喵子

扫码关注云+社区

领取腾讯云代金券