python迭代器

  

<强>

<强>

<强>可以直接作用的循环的数据类型

我们已经知道,可以直接作用的循环的数据类型有以下几种:

,一类是集合数据类型如:列表、元组、dict,集,str等;

,一类是发电机,包括生成器和带产生的生成器函数;


<强>可迭代对象定义

这些可以直接作用的循环的对象称为<强>可迭代对象:Iterable


<强>可迭代对象判断

可以使用isinstance()判断一个对象是否是Iterable对象:

得到collections  import  Iterable,迭代器   isinstance ([], Iterable)   print (isinstance ([], Iterable))   Iterable isinstance ({})   isinstance (“abc”, Iterable)   isinstance ((x  for  x 拷贝范围(10)),Iterable)   Iterable isinstance(100),,,, #返回假


<强>迭代器定义

可以被下一个()函数调用并不断返回下一个值的对象称为<强>迭代器:迭代器。

isinstance ((x  for  x 拷贝范围(10)),迭代器)   print (isinstance ((x  for  x 拷贝范围(10)),迭代器))

<强>

<强>把列表,dict, str转成迭代器

生成器都是迭代器对象,但列表,dict, str虽然是Iterable,却不是迭代器。

把列表,dict, str等Iterable变成迭代器可以使用iter()函数:

isinstance (iter([]),迭代器)   print (isinstance (iter([]),迭代器))   isinstance (iter (“abc”),迭代器)   print (isinstance (iter (“abc”),迭代器))



<强>为什么列表,dict, str等数据类型不是迭代器?


这是因为python的迭代器对象表示的事一个数据流,迭代器对象可以被下一个()函数调用并不断返回一个序列,

但我们却不能提前知道序列的长度,只能不断通过下一个()函数实现按需计算下一个数据,所以迭代器的计算是惰性的,

只有在需要返回下一个数据时它才会计算。


迭代器甚至可以表示一个无限大的数据流,例如全体自然数。而使用列表是永远不可能存储全体自然数的。



<强>小结:

凡是可作用域的循环的对象都是Iterable类型;

凡是可作用下()于函数的对象都是迭代器类型,它们表示一个惰性计算的序列;

集合数据类型如:列表、dict, str等是Iterable但不是迭代器,不过可以通过iter()函数获得一个迭代器对象。


<强> python的循环本质上就是通过不断调下()用函数实现的,

范围(10),,,   ,,,python3.x 就是一个迭代器   ,,,python2.x 就生成一个列的表,要成为迭代器写成xrange (10),,


例如:

for 小姐:拷贝(1、2、3、4、5):   ,才能通过   就相当于下边:   - - - - - - - - - - - - - - - - - - -   首先获得迭代器   时间=it  iter ([1、2、3、4、5))   循环   while 真正的:   ,,,试一试:   ,,,,,,,#获得下一个值   ,,,,,,,x 下(it)=,   ,,,except 抛出StopIteration:   ,,,,,,,#遇到抛出StopIteration   ,,,,,,,休息   - - - - - - - - - - - - - - - - - - - - - - -


python迭代器