迭代器和制作器的区别是啥?这个问题招聘面试的情况下常常做为灵魂拷问 。今日一起从定义到编码整理一遍,做为汇总和纪录。

区别是:

  • 制作器的益处是延迟时间测算 ,一次返回一个結果。换句话说,它不容易一次形成全部的結果,这针对大信息量解决 ,可能十分有效 。

基本定义

  1. 迭代:当建立的对象能够被一个接一个载入里边的值,叫迭代。
    目录、元组 、词典、字符串数组全是可迭代对象。数据、布尔值是不能迭代的对象 。
  2. 迭代器协议书:对象必须出示next()方法,根据它返回迭代中的下一项 ,直至返回停止抛出去StopIteration出现异常 。
  3. 可迭代对象:完成了迭代器协议书对象。list 、tuple、dict全是可迭代对象(Iterable) ,但并不是迭代器对象(Iterator)。
    必须应用内建函数iter(),把这种都变为可迭代器对象(Iterable) 。
  4. for item in Iterable:循环系统的实质便是先根据iter()涵数获得可迭代对象Iterable的迭代器,随后对获得到的迭代器持续启用next()方法 ,
    来获得下一个值并将其取值给item,当碰到StopIteration的出现异常后循环系统完毕。

实际操作一下

  • 迭代器:Python中一个完成_iter_方法和_next_方法的类对象,便是迭代器。
>>> list = [1,2,3]
>>> lt = iter(list)
>>> print(next(lt))
1
>>> print(next(lt))
2
>>> print(next(lt))
3
>>> print(next(lt))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration

  • 制作器:实质上是动态性形成迭代的值 ,应用完立即丢掉,能够合理节约存储空间,但这种值只有被迭代一次 。
>>> def g():
...     for i in range(3):
...         yield i
... 
>>> g = g()
>>> next(g)
0
>>> next(g)
1
>>> next(g)
2
>>> next(g)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration

yield句子与return句子一样 ,都具有返回的功效。但yield与return不一样,假如实行return句子,立即返回return后边关系式的值。但实行yield句子 ,返回的是一个制作器对象,并且这一制作器对象的当今值,便是yield句子后边跟的关系式的值 。启用yield句子后 ,当今涵数便会返回一个迭代器 ,并且涵数会中止实行,直至对该涵数开展下一次迭代。

制作器是一种可塑性的编码序列,如果我们必须建立一个 0~xxxxxxxxx 的编码序列 ,那样大的编码序列建立出去会占有运行内存,制作器就处理那样的难题 。

参照连接:
http://dwz.date/daG5
http://dwz.date/daG6

文章来源于网络,如有侵权请联系站长QQ61910465删除
本文版权归趣快排www.sEoguruBlog.com 所有,如有转发请注明来出,竞价开户托管,seo优化请联系QQ✈61910465