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

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)  # 迭代器是可迭代对象

3
4
>>> 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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值