Python中yield的作用及用法
在Python的编程世界中,yield是一个比较常见的关键字,它能够让函数执行时具有“中断”和“重启”的功能,常用于生成器函数和迭代器中,具有良好的可读性和易于维护的特点。
生成器函数生成序列
在Python中,生成器函数是一种特殊的函数,它使用yield语句而非return语句来返回一个序列,每次生成一个值后自动进入暂停状态,等待下一个调用时从暂停状态恢复执行。
以下是一个简单的生成器函数的例子:
def my_generator():
yield 1
yield 2
yield 3
上述函数可以生成一个包含1、2、3三个元素的序列,使用for循环可以遍历生成的元素:
for i in my_generator():
print(i)
输出结果为:
1
2
3
延迟执行,节省内存
生成器函数的另一个强大特性在于它的延迟执行机制,生成器函数在使用的时候不会立即执行,而是在需要数据的时候一步步地生成数据,同时只在内存中保留当前生成元素的状态和值,节省了内存空间。
比如下面这个例子中,我们可以使用一个生成器和一个列表分别生成一个包含100万个随机数的序列,然后分别打印生成的元素和列表中的元素所占用的内存空间大小:
import sys
import random
def random_numbers():
for i in range(1000000):
yield random.random()
numbers = list(random_numbers())
print(sys.getsizeof(numbers))
print(sys.getsizeof(random_numbers()))
运行后输出的结果分别为:
8448808
120
可以看出,在生成包含100万个随机数的序列时,使用生成器所占用的内存空间只有120字节,而使用列表则占用了近9MB的内存空间。
生成器实现协程
在Python中,协程是一种轻量级的线程,可以在执行过程中被中断和恢复,可以在解决IO密集型任务的时候发挥出其独特的优势。在Python的协程中,yield可用于暂停协程的执行,yield from语法则可以用于子协程的处理。
以下是一个简单的协程示例,它可以接收来自外部的传值,并根据不同的条件返回不同的值:
def my_coroutine():
value = None
while True:
value = yield value
if value == 'A':
value = yield 'Hello'
elif value == 'B':
value = yield 'World'
else:
value = yield 'Goodbye'
可以看出,在协程中使用yield语句可以暂停协程的执行,并通过yield语句返回给调用者,而使用send方法则可以从外部传值给协程,并恢复协程的执行。
总结
通过使用yield语句,我们可以实现生成器函数和迭代器,同时也可以实现协程的功能,避免了IO密集任务中的阻塞等待,大幅提高了程序的性能和灵活性。无论是初学者还是经验丰富的Python开发者,都可以通过yield语句实现更加优美和高效的代码逻辑。
最后的最后
本文由chatgpt生成,文章没有在chatgpt
生成的基础上进行任何的修改。以上只是chatgpt
能力的冰山一角。作为通用的Aigc
大模型,只是展现它原本的实力。
对于颠覆工作方式的ChatGPT
,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。
🧡AI职场汇报智能办公文案写作效率提升教程 🧡 专注于AI+职场+办公
方向。
下图是课程的整体大纲
下图是AI职场汇报智能办公文案写作效率提升教程
中用到的ai工具
🚀 优质教程分享 🚀
- 🎄可以学习更多的关于人工只能/Python的相关内容哦!直接点击下面颜色字体就可以跳转啦!
学习路线指引(点击解锁) | 知识定位 | 人群定位 |
---|---|---|
🧡 AI职场汇报智能办公文案写作效率提升教程 🧡 | 进阶级 | 本课程是AI+职场+办公的完美结合,通过ChatGPT文本创作,一键生成办公文案,结合AI智能写作,轻松搞定多场景文案写作。智能美化PPT,用AI为职场汇报加速。AI神器联动,十倍提升视频创作效率 |
💛Python量化交易实战 💛 | 入门级 | 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 |
🧡 Python实战微信订餐小程序 🧡 | 进阶级 | 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 |