持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第6天,点击查看活动详情
1️⃣生成器
- 在 Python 中,使用了
yield的函数被称为生成器(generator)
所以生成器就是一个特殊的函数
-
一个函数用了
yield后,返回的是一个迭代器对象,此时Python解释器会将其视作生成器 -
也就是说生成器一定是迭代器,它也一定可迭代。
那么问题来了:什么是yield?
简单的说,在生成器中:
yield相当于断点,当我们调用生成器时,一旦遇到yield, 生成器就是会暂停并保存当前所有的运行信息,并返回yield后面的值,。- 在下一次执行
next()方法时,生成器会从之前断点处开始,继续运行。
2️⃣为什么要用yield
我们为什么要用yield
简单来说:
- 有时,函数会返回一个列表,这个列表的大小是动态的,随着参数的大小变化而变化
- 比如斐波那契数列
- 一旦参数过大,数列的长度就会随之变大,此时的内存占用就会变得很大
- 为了节省内存,我们就想着让函数返回一个迭代器
- 当每次循环时能够一个一个得到列表中的值,而不是直接得到一整个列表
- 这个时候
yield就起作用了- 使用了
yield的函数,也就是生成器,就可以返回一个迭代器,在每次迭代中返回下一个值- 下次迭代时,代码从会从
yield的下一条语句继续执行- 而函数的状态是和上次中断执行前完全一样的
- 于是函数继续执行,直到遇到 yield,再次中断
来看看一个例子:
就斐波那契数列的两段代码对比,可以看出区别在哪:
🌱:不使用yield
🌱:使用yield
或者使用for循环来访问:
甚至你想这样转换为列表也行:
3️⃣小结
生成器就是加了yield的函数
每次执行到有yield的时候,会返回yield后面的值,并且函数会暂停,直到下次调用才继续执行函数。最后迭代终止。
生成器的特点:
生成器对象可以使用for循环或者
__next__方法,next()函数进行遍历生成器对象可以转换为列表,元组
需要注意的是,访问生成器对象的元素时,已经访问过的元素就无法再次访问。
如果想要再次访问就得重新创建一个生成器对象
使用生成器的好处:
- 节省内存空间
- 提升代码运行速度
因此,一旦我们想要节约内存资源或者提升运行效率,可以考虑使用生成器!
写在最后,今天的笔记就到这里,欢迎大家到评论区一起讨论!
好了,python生成器的小知识就看到这,希望对你有所帮助