什么是生成器 — 一篇文章让你看懂

嗨嗨,我是小圆 ~ 今天来给大家讲讲什么是生成器

请添加图片描述

生成器是 Python 初级开发者最难理解的概念之一,虽被认为是 Python 编程中的高级技能,但在各种项目中可以随处见到生成器的身影,你得不得去理解它、使用它、甚至爱上它。

请添加图片描述

提到生成器,总不可避免地要把迭代器拉出来对比着讲,生成器就是一个在行为上和迭代器非常类似的对象,如果把迭代器比作 Android 系统,那么生成器就是 iOS,二者功能上差不多,但是生成器更优雅。

什么是迭代器

顾名思义,迭代器就是用于迭代操作(for 循环)的对象,它像列表一样可以迭代获取其中的每一个元素,任何实现了 next 方法
(python2 是 next)的对象都可以称为迭代器。

它与列表的区别在于,构建迭代器的时候,不像列表把所有元素一次性加载到内存,而是以一种延迟计算(lazy evaluation)方式返回元素,这正是它的优点。比如列表含有中一千万个整数,需要占超过400M的内存,而迭代器只需要几十个字节的空间。因为它并没有把所有元素装载到内存中,而是等到调用 next 方法时候才返回该元素(call by need 的方式),本质上 for 循环就是不断地调用迭代器的next方法。

以斐波那契数列为例来实现一个迭代器:

class Fib:def __init__(self, n):self.prev = 0self.cur = 1self.n = ndef __iter__(self):return selfdef __next__(self):if self.n > 0:value = self.curself.cur = self.cur + self.prevself.prev = valueself.n -= 1return valueelse:raise StopIteration()f = Fib(10)
print([i for i in f])
#[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

什么是生成器

知道迭代器之后,就可以正式进入生成器的话题了。普通函数用 return 返回一个值,和 Java 等其他语言是一样的,然而在 Python 中还有一种函数,用关键字 yield 来返回值,这种函数叫生成器函数,函数被调用时会返回一个生成器对象,生成器本质上还是一个迭代器,也是用在迭代操作中,因此它有和迭代器一样的特性,唯一的区别在于实现方式上不一样,后者更加简洁

最简单的生成器函数:

>>> def func(n):
...     yield n*2
...
>>> func
<function func at 0x00000000029F6EB8>
>>> g = func(5)
>>> g
<generator object func at 0x0000000002908630>
>>>

func 就是一个生成器函数,调用该函数时返回对象就是生成器 g ,这个生成器对象的行为和迭代器是非常相似的,可以用在 for 循环等场景中。注意 yield 对应的值在函数被调用时不会立刻返回,而是调用next方法时(本质上 for 循环也是调用 next 方法)才返回

>>> g = func(5)
>>> next(g)
10>>> g = func(5)
>>> for i in g:
...     print(i)
...
10

那为什么要用生成器呢?显然,用生成器在逼格上要比迭代器高几个等级,它没有那么多冗长代码了,而且性能上一样的高效,为什么不用呢?来看看用生成器实现斐波那契数列有多简单。

def fib(n):prev, curr = 0, 1while n > 0:n -= 1yield currprev, curr = curr, curr + prevprint([i for i in fib(10)])
#[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

生成器表达式

生成器表达式与列表推导式长的非常像,但是它俩返回的对象不一样,前者返回生成器对象,后者返回列表对象。

>>> g = (x*2 for x in range(10))
>>> type(g)
<type 'generator'>
>>> l = [x*2 for x in range(10)]
>>> type(l)
<type 'list'>

好了,这篇文章分享到这里就结束了 ~

我是小圆,我们下篇文章见 ~

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/69264.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么才能大批量生成原创文章

要大批量生成原创文章并不容易。毕竟&#xff0c;原创文章需要花费较多地时间和精力&#xff0c;才能够展现出高质量、有价值地内容。以下是一些方法可以帮助您大批量生成原创文章&#xff1a;1. 利用关键词通过使用关键词工具&#xff0c;寻找与您网站或品牌相关地长尾关键词。…

新媒体必备小技能——文章生成图片

相信公众号运营大家都不陌生了&#xff0c;与运营和自媒体相关的工作大多都会用到图文编辑&#xff0c;当然好看的排版直接影响读者的阅读体验&#xff01;在日常编辑推文以及制作宣传的过程中&#xff0c;图片是必不可少的重要组成部分&#xff01;96编辑器的一键生成图片功能…

狗屁文章生成器-批量生成原创文章自动发布网站-免费下载

狗屁文章生成器,什么是狗屁文章生成器&#xff0c;狗屁文章生成器从字面意思都能理解出来&#xff0c;就是生成的文章毫无逻辑感&#xff0c;胡乱生成&#xff0c;毫无可读性。只需要输入关键词就能实现狗屁文章生成。狗屁文章生成器。火于2020年某老板喊一员工写3000字原创检讨…

AI文章生成

文章 &#x1f9d0;一、我们在做什么&#x1f971;二、项目详情1.前端&#x1f642;&#xff08;1&#xff09;基本要求&#x1f610;&#xff08;2&#xff09;批量操作功能&#x1f641;&#xff08;3&#xff09;模式选择功能 &#x1f61f;&#xff08;4&#xff09;模型选…

文章生成器-原创文章生成器

在网络营销领域&#xff0c;优质文章是吸引新客户和保留老客户的重要工具。然而&#xff0c;生成高质量且符合SEO优化的文章并不是一件容易的事情。这就是为什么网站文章生成器如今备受欢迎的原因。而在众多的文章生成工具中&#xff0c;147GPT批量生成文章软件是一款非常出色的…

GPT关键词挖掘,自动关键词文章生成

随着互联网的发展&#xff0c;内容营销已成为企业营销策略中不可或缺的一环。有效的关键词文章生成可以帮助企业吸引更多的潜在客户&#xff0c;提高品牌曝光度和转化率&#xff0c;从而实现营销目标。 关键词文章生成是指根据特定的关键词和主题&#xff0c;使用软件工具自动生…

ChatGPT添加插件功能:开始联网集成第三方服务 渐成操作系统

雷递网 乐天 3月24日 人工智能公司OpenAI日前宣布&#xff0c;正为ChatGPT添加对插件的支持——将其与第三方服务集成或允许其访问最新信息的扩展。OpenAI称&#xff0c;正从小处着手&#xff0c;研究现实世界的使用、影响、安全和校准挑战。 “据我们的迭代部署理念&#xff0…

最高年薪近56万!猎聘重磅发布2023最新AIGC就业趋势大数据报告

©作者 | 编辑部 来源 | 新智元 猎聘大数据研究院重磅发布《AIGC就业趋势大数据报告2023》&#xff0c;招聘平均年薪已达40万&#xff0c;博士需求量同比增长超100%。 不用赘述&#xff0c;大家都知道&#xff0c;最近半年ChatGPT是有多么火爆。 随着ChatGPT的全球爆火&…

文心一言与GPT-4比对测试!

Waitlist了三个星期&#xff0c;今天下午终于拿到了百度文心一言的体验资格&#xff0c;于是立刻展开测试。 根据文心一言网页端信息显示&#xff0c;目前最新发版是4月1号的版本&#xff0c;版本号是v1.0.3&#xff0c;应该是从上个月16号发布会以后又做了两版迭代。根据文心一…

2013年各大IT公司研发类笔试题

不可以看见的部分请见http://www.iteblog.com/archives/262 一、百度(武汉地区) 第一部分&#xff1a; 1、描述数据库的简单操作。 2、描述TCP\IP四层模型&#xff0c;并简述之。 3、描述MVC的内容。 第二部分&#xff1a; 1、给出a-z0-9&#xff0c;在其中选择三个字符组…

牛客网2018吉比特校招技术开发类试题分析

最近做了两套笔试题&#xff0c;复习一下错题&#xff0c;有很多地方需要查缺补漏&#xff0c;再谈一下感受总结一下。 2018届吉比特校招技术类笔试B卷 吉比特2018届提前批校园招聘-开发类试卷 一、基础题 1.已知 a 6789x 6789、b 6789x 6790、c 6789x 6791&#xff0c…

大厂可能会问的那些思维题和技术点

精选大厂可能会问的那些思维题和技术点 一、题目一1.1、思路&#xff1a;1.2、代码实现 二、题目二三、const 的含义及实现机制, ,比如 : const int i, 是怎么做到 i 只可读的? ?四、到商店里买 200 的商品返还 100 优惠券( ( 可以在本商店代替现金) ) 。请问实际上折扣是多少…

字节跳动数据分析岗笔试分享笔试形式和内容

字节跳动数据分析岗笔试 笔试形式和内容 由于关于字节跳动数据分析的笔试分享经验较少&#xff0c;参加了字节的笔试后&#xff0c;想做一个记录&#xff0c;就写下了这篇文章。不知道自己笔试过了没有&#xff0c;希望能收到面试邀请吧&#xff0c;同时也希望可以帮助到大家…

计算机技术类社团纳新笔试题示例

计算机协会笔试题 学号&#xff1a;_____________ 姓名: _____________ 说明:如若答题空间不够&#xff0c;可自行另附纸张 printf(“Hello Cast!”): 亲爱的学弟学妹们&#xff0c;欢迎参与浙江理工大学计算机协会的笔试选拔部分。我们作为可爱的学长学姐&#xff0c;十…

10道字节跳动C++/Java笔试真题你能做对几道?3道就赢了80%的竞争者(含答案)

整理了几道字节跳动真题&#xff0c;来试试自己水平有多厉害吧&#xff0c;每题还有答案和详细解答哦。 1、变量a是一个64位有符号的整数&#xff0c;初始值用16进制表示为&#xff1a;0x7FFFFFFFFFFFFFFF。变量b是一个64位有符号的整数&#xff0c;初始值用16进制表示为&#…

chatgpt赋能python:Python:为什么没有桌面图标?

Python&#xff1a;为什么没有桌面图标&#xff1f; 作为一种功能强大的编程语言&#xff0c;Python越来越受到开发人员的欢迎。不过&#xff0c;相对于其他流行的应用程序&#xff0c;开发人员可能会发现一个让他们感到疑惑的问题&#xff1a;为什么Python没有桌面图标&#…

阿里云科学家入选计算机顶会HPCA名人堂,他是什么来头?

记者 | 夕颜 出品 | CSDN&#xff08;ID:CSDNnews&#xff09; 近日&#xff0c;由 IEEE 主办的高性能计算架构国际研讨会 HPCA 公布了最新一期名人堂&#xff08;Hall of Fame&#xff09;名单&#xff0c;来自阿里云基础设施服务器研发团队的科学家蒋晓维成为名人堂新晋成员。…

文本框字数限制

<div class"layui-form-item"><label class"layui-form-label"><span style"color: red">*</span>院校简介&#xff1a;</label><div class"layui-input-block"><textarea class"layui-t…

水瓶座性格分析

水瓶座性格分析 水瓶座性格分析&#xff08;新浪星座&#xff09; 水瓶座2月13日

水瓶座名人既水瓶座概论

2019独角兽企业重金招聘Python工程师标准>>> -- 水瓶座名人既水瓶座概论冷淡、古怪的理想主义和试验主义--水瓶座&#xff08;ZT&#xff09;水瓶座的名人世界著名的水瓶座&#xff1a;林肯、杰弗逊、里根、福兰克林罗斯福、叶利钦、爱迪生、达尔文、安培、门捷列夫…