Skip to main content

01-介绍

本节从以下四个部分进行介绍:

  • 可迭代对象
  • 迭代器
  • 协议及应用场景
  • 生成器

1.可迭代对象

Python 中六大标准数据类型:

字符串、列表、元组、集合、字典、数值类型

可迭代对象:str(字符串)list(列表)tuple(元组)set(集合)dict(字典)

我们已经知道可以对 str(字符串)list(列表)tuple(元组)set(集合)dict(字典) 类型的数据使用 for ... in ... 的循环语法从其中依次拿到数据进行使用,我们把这样的过程称为遍历,也叫 迭代。

li = [1, 2, 3]
for item in li:
print(item)

可迭代对象的本质其实都是 collections(容器数据类型) 模块里的 Iterable 类创建出来的实例。

1.1可迭代对象的定义

  • 实现了 __iter__ 方法
  • __iter__ 方法返回了一个可迭代器对象

那么我们如何查看一个数据类型是否是可迭代对象呢?

使用:isinstance(对象, Iterable) 即可判断一个数据类型是否为可迭代对象:

# 构造一个空列表,列表可以存储任意数据类型
li = list()
# 向里面写入数据
li.append(1)
li.append("a")
li.append(0.1)

# 使用 isinstance 来判断一个对象是否为可迭代对象
from collections.abc import Iterable

print("是否是可迭代器对象: ", isinstance(li, Iterable))

for item in li:
print(item)

2.迭代器

迭代器和上面的 可迭代对象是什么关系呢?

迭代器是访问可迭代对象的工具。

迭代器是可以使用 next() 逐个取值的对象,例如 map()、filter()、zip() 生成的对象。

2.1区分可迭代对象和迭代器

  • Iterable(可迭代对象):可以通过 iter() 转换为迭代器,如 listtuplestr等。
  • Iterator(迭代器):本身可迭代,同时实现了 __next__() 方法。

示例:

from collections.abc import Iterable, Iterator

lst = [1, 2, 3]
it = iter(lst)
print(isinstance(lst, Iterable)) # True,列表是可迭代对象
print(isinstance(it, Iterator)) # True,迭代器是迭代器对象