发布时间:2019-09-25 08:23:39编辑:auto阅读(1877)
迭代对象:在我看来就是可以用for循环依次取值的一个序列就叫可迭代对象
迭代器:就是可以用next()来进行取值的对象
生成器:我的理解就是在迭代器的基础上给了与暂停功能的函数
生成器其实就是一种特殊的迭代器。它使一种更为高级、更为优雅的迭代器。
使用生成器让我们可以以一种更加简洁的语法来定义迭代器。
这三者的关系如下:
可迭代对象包含了迭代器,迭代器又包含了生成器
可迭代对象>>>迭代器>>>生成器
网上找了张图很明显
下面进行举例:
In [78]: isinstance((),Iterable)#说明了元组是可迭代对象 Out[78]: True In [79]: isinstance([],Iterable)#说明了列表是可迭代对象 Out[79]: True In [80]: isinstance({},Iterable)#说明了字典是可迭代对象 Out[80]: True In [81]: isinstance("abc",Iterable)#说明了字符串是可迭代对象 Out[81]: True In [82]: aa = (x for x in range(5))#定义一个生成器 In [83]: type(aa) Out[83]: generator In [84]: isinstance(aa,Iterable)#说明了生成器是可迭代对象 Out[84]: True
而下面的例子则是证明了字典/元组/列表/字符串不是迭代器:
In [86]: isinstance((1,23,4),Iterator) Out[86]: False In [87]: isinstance([],Iterator) Out[87]: False In [88]: isinstance({},Iterator) Out[88]: False In [89]: isinstance("abc",Iterator) Out[89]: False
下面的例子则说明生成器不都是迭代器:
In [90]: bb = [x for x in range(5)] In [91]: type(bb) Out[91]: list In [92]: bb Out[92]: [0, 1, 2, 3, 4] In [93]: cc = inter(bb) --------------------------------------------------------------------------- NameError Traceback (most recent call last) <ipython-input-93-fd07bb1f753d> in <module>() ----> 1 cc = inter(bb) NameError: name 'inter' is not defined In [94]: cc = iter(bb) In [95]: type(cc) Out[95]: list_iterator In [96]: cc Out[96]: <list_iterator at 0x7fa4d6e53390> In [97]: isinstance(bb,Iterator) Out[97]: False In [98]: isinstance(bb,Iterable) Out[98]: True In [99]: isinstance(cc,Iterator) Out[99]: True In [100]: isinstance(cc,Generator) Out[100]: False
生成器和迭代器的区别:
生成器是next的,next的操作,按照序列顺序一次只能返回一个元素
迭代器是一次性读取了可迭代对象的所有元素到内存。
生成器函数的一个例子:
比如你欠了银行180W块钱,
但是你没有能力一次性的还完,
或者说你不想和亲戚朋友借钱来还,
所以你在银行办了18个月分期还款来缓解自己的压力(生成器),
就这样银行每次给你发这个月的账单你就还一次10W,
直到18个月后你就把钱还完了
这就是生成器,每个月来了账单就还一次,知道把钱还完
这样就不会在一次性还钱的时候把自己给急疯了,银行也能够收到它的钱的!
这就是生成器的作用,如果我们产生的数据很多,
数据量很大的话,很容易把进程跑死或者把服务器跑崩溃,
这个生成器就很好的解决了这个问题
如果有错误的地方欢迎各位大佬帮忙指正,谢谢!
这篇文章个人感觉还挺好:
https://www.cnblogs.com/vuedev/p/7349476.html
上一篇: python3 turtle使用报错,代
下一篇: python3学习之类成员、扩展父类方法
48451
47338
38221
35462
29920
26626
25598
20545
20240
18665
58°
70°
174°
118°
144°
261°
336°
332°
309°
399°