装饰器,迭代器与生成器
迭代器:
可迭代对象之前加一个iter关键词就变成了迭代器。迭代器只有一个__next__方法,没有其他方法了。
>>> a = iter([1,2,3,4,5])
>>> a
<list_iterator object at 0x101402630>
>>> a.__next__()
1
>>> a.__next__()
2
>>> a.__next__()
3
>>> a.__next__()
4
>>> a.__next__()
5
>>> a.__next__()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
生成器:
一个函数被调用时返回的东西是一个迭代器,此函数就叫做生成器(generator)。函数内部加上yield单词,此函数就会变成生成器 。生成器(函数)返回迭代函数。
生成器的作用是实现异步做事。比如我去银行取钱,取10万,由于额度较大,所以需要审核,审核时间是2小时,在这两小时里面,我不能干别的事情,只能干等着,不然审核完成的时候银行找不见我,这叫同步。现在银行系统升级,等审核好了,会有短信通知,我在这两小时里面就可以出去干别的事情,这就叫异步。生成器就是升级后的银行审核系统。生成器可以返回一个迭代器,假如迭代器可以迭代10次,这个迭代器可以在迭代3次的时候去干别的时候,yield会保存现场,等别的时候干完后可以回来从刚才离开的地方继续迭代第4次,第5次。。。一旦函数被yield
,函数会暂停,控制权返回调用者。
yield 与 return:
yield
与return
返回相同的值,区别在于return
返回后,函数状态终止,而yield
会保存现场,在返回后,函数继续指向yield下面的语句。
关于生成器的理解,可以参考这篇别人的博客,感觉写的很好:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理