迭代器:
可迭代对象之前加一个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下面的语句。