装饰器,迭代器与生成器

Posted yibeimingyue

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了装饰器,迭代器与生成器相关的知识,希望对你有一定的参考价值。

迭代器:

可迭代对象之前加一个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:

yieldreturn返回相同的值,区别在于return返回后,函数状态终止,而yield会保存现场,在返回后,函数继续指向yield下面的语句。



以上是关于装饰器,迭代器与生成器的主要内容,如果未能解决你的问题,请参考以下文章

装饰器,迭代器与生成器

python基础-函数之装饰器迭代器与生成器

叠加装饰器与迭代器

Day4 闭包装饰器decorator迭代器与生成器面向过程编程三元表达式列表解析与生成器表达式序列化与反序列化

day13迭代器与生成器

Python装饰器与GIL锁解释