0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Python yield的作用

科技绿洲 来源:Python实用宝典 作者:Python实用宝典 2023-11-02 11:21 次阅读

要理解yield的作用,你必须理解生成器是什么。在理解生成器之前,必须先理解迭代器。

迭代器

当您创建一个列表时,你可以逐个读取它的项。逐项读取其项称为迭代:

图片

mylist是一个可迭代的对象。当你使用列表解析式时,你创建了一个列表,因此也是一个迭代器:

图片

所有你可以用"for... in ...."都是迭代器,包括列表、字符串、文件…等等。

这些迭代器非常方便,因为你可以随心所欲地读取它们,但是你将所有的值都存储在内存中,当你有很多值时,这就非常浪费内存了。

为了解决这样的问题,Python有了生成器的概念。

生成器

生成器是迭代器,这种迭代器只能迭代一次。生成器不会将所有值都存储在内存中,它们会动态生成这些值:

图片

它和列表解析式是类似的,只是用()代替了[]。但是,你不能在mygenerator中对i执行第二次,因为生成器只能使用一次:它print(0),然后忘记它,print(1),最后是4。

Yield

yield是一个与return类似的关键字,只是函数将返回一个 生成器

认真看完下面这个例子,你应该能完全明白。

图片

函数将返回一组只需要读取一次的值。如果你能将这个特性理解清楚,并将其应用到你的代码中,可能可以极大地提高性能,下次我们将介绍在什么时候该用它。

请注意示例中的第6行,在调用函数时,在函数体中编写的代码不会运行。函数只返回生成器对象,可别忘了这个重点。

最后,你的代码将从每次使用生成器时停止的地方继续。因此示例中第二次使用生成器的时候,我们的生成器已经完全没有值了。

所以最核心的逻辑如下:

  1. for函数第一次调用从函数创建的生成器对象时,它将从头运行函数中的代码,直到达到yield,返回循环的第一个值。
  2. 随后的调用都将再次运行你在函数中编写的循环,并yield返回下一个值,直到没有要返回的值为止,就如我们上面的例子所示。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 存储
    +关注

    关注

    13

    文章

    4213

    浏览量

    85554
  • 生成器
    +关注

    关注

    7

    文章

    313

    浏览量

    20939
  • python
    +关注

    关注

    55

    文章

    4765

    浏览量

    84353
收藏 人收藏

    评论

    相关推荐

    Pythonyield表达式及其批量获得minibatches的应用

    Python 小谈 yield 表达式及其批量获得 minibatches 的应用
    发表于 05-21 08:20

    Python虚拟环境的作用和搭建方法

    Python虚拟环境的作用及搭建方法
    发表于 06-08 07:32

    Python在实时嵌入式系统中有什么作用

    如何用Python语言去控制单片机?Python在实时嵌入式系统中有什么作用
    发表于 07-14 06:33

    python生成器

    python生成器1. 什么是生成器?生成器(英文名 Generator ),是一个可以像迭代器那样使用for循环来获取元素的函数。生成器的出现(Python 2.2 +),实现了延时计算,从而缓解
    发表于 02-24 15:56

    python变量的作用

    python变量的作用域1. 作用Python作用域可以分为四种:L (Local) 局部作用
    发表于 03-03 16:50

    yield 开始入门python协程

    简单介绍 yield本篇文章会先向你介绍一个陌生的 Python 关键词,他和 return 就像一对新兄弟,有相似之处,又各有不同。相似的是:yield 和 return 都可以在一个函数里将值
    发表于 03-16 16:21

    Python教程之Python中的yield关键字能做什么详细程序说明

    要理解yield做了什么,就必须明白生成器(generators)为何物,而在明白生成器之前还要知道迭代器(iterables)。
    发表于 12-25 11:21 12次下载
    <b class='flag-5'>Python</b>教程之<b class='flag-5'>Python</b>中的<b class='flag-5'>yield</b>关键字能做什么详细程序说明

    python变量的作用

    python变量的作用域 1. 作用Python作用域可以分为四种: L (Local) 局部作用
    的头像 发表于 03-03 16:50 1511次阅读

    yield开始入门python协程

    本篇文章会先向你介绍一个陌生的 Python 关键词,他和 return 就像一对新兄弟,有相似之处,又各有不同。
    的头像 发表于 03-16 16:20 983次阅读

    通过例子由浅入深的理解yield协程

    send:send() 方法致使协程前进到下一个yield 语句,另外,生成器可以作为协程使用
    的头像 发表于 08-23 11:12 1970次阅读

    python语言之使用async关键字来定义函数

    早期的协程是用yield来实现的,但是代码特别难懂, python3.5之后的版本, 使用 async 关键字来定义的函数。调用该函数,会返回一个协程对象
    的头像 发表于 08-24 11:12 2678次阅读

    python语言之await和yield from的对比

    不同点:yield from 后面的值,要么是生成器,要么是最终为可迭代对象,而await后面只能跟async开头的方法
    的头像 发表于 08-24 12:02 2541次阅读

    python中eval的用法和作用

    `eval()`函数的作用是将字符串作为Python表达式进行求值。它可以执行包括算术运算、逻辑运算、函数调用以及定义在当前命名空间中的变量等在内的各种表达式。使用`eval()`可以动态地执行代码,并在代码中使用变量或函数。
    的头像 发表于 09-28 16:26 3754次阅读

    如何学会 Python yield 关键词

    要理解yield作用,你必须理解生成器是什么。在理解生成器之前,必须先理解迭代器。 1.迭代器 当您创建一个列表时,你可以逐个读取它的项。逐项读取其项称为迭代: mylist是一个可迭代的对象
    的头像 发表于 10-31 11:06 295次阅读
    如何学会 <b class='flag-5'>Python</b> <b class='flag-5'>yield</b> 关键词

    Python中元类的作用

    1.什么是类 在理解元类之前,我们必须先掌握Python中的类(class)。 和大多数语言一样,Python中的类知识用来描述如何“生成一个对象”: 但是,在Python中,类不仅能用来描述
    的头像 发表于 11-02 11:18 482次阅读
    <b class='flag-5'>Python</b>中元类的<b class='flag-5'>作用</b>