python基础语言之迭代器

迭代器

迭代是访问集合元素的一种方式。迭代器是一个可以记住遍历位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不能后退。

1. 可迭代对象

python语言中有些数据类型可以直接用for循环进行遍历获取元素值,比如:

集合数据类型:list,tuple,dict,set,str等

生成器(generator),包括生成器和带yield的generator function(还不了解生成器的可以参考python核心编程之生成器)

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

2. 判断是否可迭代

可使用isinstance()函数判断一个对象是否是可迭代对象Iterable

>>> from collections import Iterable

>>> isinstance([],Iterable)
>>> True

>>> isinstance({},Iterable)
>>> True

>>> isinstance("abc",Iterable)
>>> True

>>> isinstance((x for x in range(10)),Iterable)
>>> True

>>> isinstance(100,Iterable)
>>> False

在python核心编程之生成器中我们知道生成器不但可以用for循环进行遍历获取元素,同时也可以用next()函数不断调用来返回下一个值,直到最后抛出StopIteration错误表示无法继续返回下一个值。

3. 迭代器

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

用isinstance()函数判断一个对象是否是迭代器对象:

>>> from collections import Iterator

>>> isinstance([],Iterator)
>>> False

>>> isinstance({},Iterator)
>>> False

>>> isinstance('abc',Iterator)
>>> False

>>> isinstance((x for x in range(10)),Iterator)
>>> True

>>> isinstance(100,Iterator)
>>> False

由上面代码可以看出列表,集合,字典,字符串等虽然是可迭代对象但并不是迭代器。而生成器既是可迭代对象又是迭代器。

4. iter() 函数

上面说了所有的生成器都是Iterator。而list,dict,str等这类可迭代对象虽然不是Iterator,但我们可以通过iter()函数将其转换为Iterator。 如下:

>>> isinstance(iter([]),Iterator)
>>> True

>>> isinstance(iter({}),Iterator)
>>> True

>>> isinstance(iter('abc'),Iterator)
>>> True

总结

  • 凡是可作用于for循环的对象都是Iterable类型
  • 凡是可用作next()函数的对象都是Iterator类型
  • 集合数据类型如list,dict,str等虽然是Iterable不是Iterator,但可通过iter()函数转换为Iterator

你可能感兴趣的:(技术,人生苦短,我用python,python,基础语言,迭代器,iterable,Iterator)