Python 迭代器

Python 迭代器

一、迭代器 

  • 可以直接用for循环的数据类型有以下几种: 

   1.集合数据类型如:list、tuple、dict、set、str等. 

   2.generator. 包括生成器和带yield的generator function. 

    以上这些可以直接作用于for循环的对象统称为可迭代对象(Iterable). 

    如何判断是不是可迭代对象(Iterable)? 

  • 可以使用isinstance()判断一个对象是否Iterable对象. 如下: 
# 1.首先需要导入Iterable模块
from collections import Iterable
print(isinstance([],Iterable))
输出:True
  
AA = isinstance({},Iterable)
print(AA)
输出:True
  
print(isinstance("abc",Iterable))
输出:True
如果返回True说明是可迭代对象(Iterable).     返回False说明不是可迭代对象(Iterable) PS:字符串也是迭代对象.   
  • 定义:【什么是迭代器】

    可以迭代并且可以被next()函数调用并不断返回下一个值的对象称为迭代器(Iterator)

    如何判断是不是可迭代器(Iterable)?

    可以使用isinstance()判断一个对象是否是Iterator对象. 如下: 

# 1.首先需要导入Iterator模块
from collections import Iterator
 
print(isinstance((x for x in range(10)), Iterator))
输出:True
 
print(isinstance([], Iterator))
输出:False
 
print(isinstance({}, Iterator))
输出:False
 
print(isinstance('abc', Iterator))
输出:False 

  以上可以看出生成器都是Iterator对象.但list、dict、str虽然是Iterable,却不是Iterator.

  如何将list、dict、str等Iterable变成Iterator可以使用iter()函数: 

from collections import Iterator
 
print(isinstance(iter([]), Iterator))
输出:True
  
print(isinstance(iter('abc'), Iterator))
输出:True

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

  •  总结:

  1.可作用于for循环的对象都是迭代对象(Iterable)类型

  2.可作用于next()函数的对象都是迭代器(Iterator)类型.它们表示一个惰性计算的序列.

  3.集合数据类型如list、dict、str等是迭代对象(Iterable)但不是迭代器(Iterator).不过可以通过iter()函数获得一个Iterator对象.

  4.所有的生成器都是迭代器. 但迭代器不一定都是生成器.

posted @ 2018-12-08 23:32  HonGIm  阅读(153)  评论(0)    收藏  举报