python 迭代器

迭代器是python访问集结成分的一种方法,可以记住对象遍历的岗位,从第一个因素起初遍历,迭代器只好往前遍历不可能以后遍历

迭代是造访集结成分的一种方法。迭代器是3个能够记住遍历的地点的目标。迭代器对象从会集的第三个因素起初走访,直到全体的要素被访问完截止。迭代器只可以往前不会落后。

迭代是造访集结成分的一种方法。迭代器是1个得以记住遍历的岗位的对象。迭代器对象从集合的率先个要素起首访问,直到全体的因素被访问完停止。迭代器只可以往前不会向下。

<h1>迭代器</h1>

一、可迭代对象

一、可迭代对象(Iterable)

以直接效果于 for 循环的数据类型有以下二种:
一类是集结数据类型,如 list 、 tuple 、 dict 、 set 、 str 等;
一类是 generator ,包含生成器和带 yield 的generator function。

python 迭代器。可迭代对象
以直接成效于 for 循环的数据类型有以下二种:
1类是集聚数据类型,如 list 、 tuple 、 dict 、 set 、 str 等;
1类是 generator ,包括生成器和带 yield 的generator function。
这个足以一向作用于 for 循环的对象统称为可迭代对象: Iterable 。
生成器正是迭代器,可迭代对象的不自然是迭代器

迭代是访问集结成分的壹种形式。迭代器是三个能够记住遍历的职位的靶子。迭代器对象从集结的首先个因素初叶走访,直到全数的成分被访问完结束。迭代器只可以往前不会滞后。

可径直被for遍历的目的都以可迭代对象,有两类:1)集合数据类型
(str, list, tuple, dict, set)    二)生成器

壹.如何是可迭代对象

那一个能够直接效果于 for 循环的靶子统称为可迭代对象: Iterable 。

剖断是还是不是可以迭代
    可以利用 isinstance() 推断四个目的是还是不是是 Iterable 对象:

<h二>一. 可迭代对象</h二>

推断多少个目的是还是不是为可迭代对象能够用 isinstance(
”  “, Iterable)   使用前要伊始入 Iterable

2.推断是还是不是足以迭代

能够应用 isinstance() 判别1个对象是还是不是是 Iterable 对象:

>>> isinstance(1,int)
True
>>> isinstance(1,str)
False
>>> isinstance("1",str)
True
# 使用Iterable时一定要记得从collections引入
>>> from collections import  Iterable
>>> isinstance([1,2],Iterable)
True
>>> isinstance((1,2),Iterable)
True

引入Iterable:
from collections import Iterable
isinstance()能够看清第3个参数是否第3个参数的对象,如判定壹是还是不是int对象,[1,2]是否列表对象,可借此判别有个别数据类型是还是不是可迭代对象。

In [50]: from collections import Iterable

In [51]: isinstance([], Iterable)
Out[51]: True

In [52]: isinstance({}, Iterable)
Out[52]: True

In [53]: isinstance('abc', Iterable)
Out[53]: True

In [54]: isinstance((x for x in range(10)), Iterable)
Out[54]: True

In [55]: isinstance(100, Iterable)
Out[55]: False

以直接效果于 for 循环的数据类型有以下两种:

>>> from collections import Iterable
>>> isinstance("  ", Iterable)
True

二、迭代器(Iterator)

能够被next() 函数调用并频频重临下贰个值的目的形成迭代器:Iterator。
能够应用isinstance() 判别2个对象是还是不是是Iterator对象。

而生成器不但能够功效于 for 循环,还可以够被 next()
函数不断调用并赶回下三个值,直到最终抛出 StopIteration
错误表示不能够继续回来下2个值了。

一类是聚众数据类型,如 list 、 tuple 、 dict 、 set 、 str 等;

 

三、iter()函数

生成器都是 Iterator 对象,但 list 、 dict 、 str 固然是 Iterable
,却不是 Iterator 。
把 list 、 dict 、 str 等 Iterable 产生 Iterator 能够应用 iter() 函数:

In [62]: isinstance(iter([]), Iterator)
Out[62]: True

In [63]: isinstance(iter('abc'), Iterator)
Out[63]: True

迭代器
能够被next()函数调用并持续重临下一个值的靶子称为迭代器:Iterator。
能够采纳 isinstance() 判断三个对象是不是是 Iterator 对象:

1类是 generator ,包涵生成器和带 yield 的generator function。

2、迭代器

总结

大凡可效果于 for 循环的靶子都以 Iterable 类型;
凡是可效果于 next() 函数的靶子都以 Iterator 类型
集聚数据类型如 list 、 dict 、 str 等是 Iterable 但不是 Iterator
,可是能够由此 iter() 函数获得2个 Iterator 对象。
目标是在运用迭代器的时候,裁减内部存款和储蓄器的挤占。

In [56]: from collections import Iterator

In [57]: isinstance((x for x in range(10)), Iterator)
Out[57]: True

In [58]: isinstance([], Iterator)
Out[58]: False

In [59]: isinstance({}, Iterator)
Out[59]: False

In [60]: isinstance('abc', Iterator)
Out[60]: False

In [61]: isinstance(100, Iterator)
Out[61]: False

那几个能够直接作用于 for 循环的目的统称为可迭代对象: Iterable 。

壹)能够被next() 
函数调用并重临值的对象称为迭代器 Iterator,能够用  isinstance( ”  “,
Iterator) ,决断叁个目的是否为迭代器,生成器重返的目标也是迭代器

iter()函数
生成器都以 Iterator 对象,但 list 、 dict 、 str 尽管是 Iterable
,却不是 Iterator 。
把 list 、 dict 、 str 等 Iterable 产生 Iterator 能够选取 iter() 函数:

<h二>二. 判定是还是不是足以迭代</h贰>

>>> from collections import Iterator
>>> isinstance((i for i in range(10)), Iterator)
True
>>> isinstance("abc", Iterator)
False
In [62]: isinstance(iter([]), Iterator)
Out[62]: True

In [63]: isinstance(iter('abc'), Iterator)
Out[63]: True

可以行使 isinstance() 剖断二个对象是还是不是是 Iterable 对象:

 

总结
• 凡是可效果于 for 循环的靶子都以 Iterable 类型;
• 凡是可职能于 next() 函数的目标都以 Iterator 类型
• 集结数据类型如 list 、 dict 、 str 等是 Iterable 但不是 Iterator
,但是能够通过 iter() 函数得到1个 Iterator 对象。
• 目标是在行使集结的时候,减弱占用的内存。

In [50]: from collections import Iterable

In [51]: isinstance([], Iterable)
Out[51]: True

In [52]: isinstance({}, Iterable)
Out[52]: True

In [53]: isinstance('abc', Iterable)
Out[53]: True

In [54]: isinstance((x for x in range(10)), Iterable)
Out[54]: True

In [55]: isinstance(100, Iterable)
Out[55]: False

二)能够自身树立贰个迭代器,需兑现迭代器的三个主导办法
__iter__亚洲必赢官网 ,() 和 __next__(),如下所示:

而生成器不但能够作用于 for 循环,还足以被 next()
函数不断调用并赶回下3个值,直到最后抛出 StopIteration
错误表示不恐怕持续回到下贰个值了。

 1 from collections import Iterator
 2 
 3 class Itt:
 4 
 5     def __init__(self, n):
 6         self.a = 0
 7         self.b = 1
 8         self.n = n
 9 
10     def __iter__(self):
11         return self
12 
13     def __next__(self):
14         self.a, self.b = self.b, self.a + self.b
15         if self.a > self.n:
16             raise StopIteration("迭代器end")
17         return self.a
18 
19 
20 t1 = Itt(100)
21 print(isinstance(t1, Iterator))
22 for i in t1:
23     print(i, end=" ")
24 
25 #输出结果
26 True
27 1 1 2 3 5 8 13 21 34 55 89

<h2>3.迭代器</h2>

  

能够被next()函数调用并持续再次回到下二个值的靶子称为迭代器:Iterator。

三)迭代器与可迭代对象的界别,迭代器也是可迭代对象。轻便的比喻一下:把可迭代
-> 会飞,迭代器 ->
鸟类,并不只是小鸟才会飞,飞机等也会飞,那样是或不是相比较便于了然

能够选用 isinstance() 判别叁个对象是或不是是 Iterator 对象:

 

In [56]: from collections import Iterator

In [57]: isinstance((x for x in range(10)), Iterator)
Out[57]: True

In [58]: isinstance([], Iterator)
Out[58]: False

In [59]: isinstance({}, Iterator)
Out[59]: False

In [60]: isinstance('abc', Iterator)
Out[60]: False

In [61]: isinstance(100, Iterator)
Out[61]: False

<h2>4.iter()函数</h2>

生成器都以 Iterator 对象,但 list 、 dict 、 str 就算是 Iterable
,却不是 Iterator 。

把 list 、 dict 、 str 等 Iterable 变成 Iterator 能够运用 iter() 函数:

In [62]: isinstance(iter([]), Iterator)
Out[62]: True

In [63]: isinstance(iter('abc'), Iterator)
Out[63]: True

<h2>总结</h2>

凡是可职能于 for 循环的目的都以 Iterable 类型;
举凡可效果于 next() 函数的对象都是 Iterator 类型
集聚数据类型如 list 、 dict 、 str 等是 Iterable 但不是 Iterator
,可是能够经过 iter() 函数得到三个 Iterator 对象。

网站地图xml地图