Python3.可迭代对象_迭代器_生成器

来源:互联网 发布:无网络摄像头安装方法 编辑:程序博客网 时间:2024/06/06 19:34

Python3.可迭代对象_迭代器_生成器

  迭代之于Python如同矩阵之于MATLAB,在Python中很多的操作都是基于迭代去做的,比如常用的readline函数、range函数、for语句、in语句等等。
  而大多数情况下,可迭代对象和迭代器这两个概念是混用的,不过初学者了解两者间的区别一是方便根据具体需求进行取舍,再者可以对Python世界中的对象、方法、函数有个具体的“感觉”。

  迭代器是可迭代对象,可迭代对象包括迭代器。

如下:

>>> a = [1, 2, 3, 4]  # a是列表,显然是可迭代对象>>> a.__next__()  # 可迭代对象列表a不具有__next__方法,不是迭代器Traceback (most recent call last):  File "<pyshell#18>", line 1, in <module>    a.__next__()AttributeError: 'list' object has no attribute '__next__'>>> b = iter(a)  # b是iter函数返回的a的迭代器>>> c = a.__iter__()  # c是对象a调用__iter__方法返回的迭代器>>> b is c  # 非迭代器的可迭代对象a,每次都只能获得它的“崭新”迭代器False>>> b.__next__()  # 迭代器b的__next__方法返回下一个元素1>>> next(b)  # next函数等效于调用了对象b的__next__方法2>>> for x in b: print(x)  # 迭代器是可迭代对象34>>> next(c)1>>> d = c.__iter__()  # 等效于d = c>>> c is d  # 迭代器有__iter__方法,调用该方法返回自身True>>> next(d)2>>> next(c)3

总结:

  • 迭代器具有__next__和__iter__方法;可迭代对象具有__iter__方法。
  • 可以理解为迭代器是对可迭代对象的描述,每次只提供可迭代对象的下一个元素;非迭代器的可迭代对象老老实实地在内存中存储了每一个元素,每次想取哪个元素就取哪个。
  • 迭代器可以通过list、tuple等函数强制取出所有元素变成列表、元组等非迭代器的可迭代对象;非迭代器的可迭代对象可以通过iter函数或__iter__方法返回其迭代器。

生成器的迭代器是其本身,并且是单次迭代器

# 待续,生成器待展开
# 本文基于Python3

原创粉丝点击