目录
在这一节,我将向大家介绍Python中的迭代器和生成器,在介绍之前我们先回顾一下什么是可迭代对象?
一、可迭代对象Iterable
含义: 可以通过for ..in….这类语句遍历读取数据的对象称之为可迭代对象
遍历(迭代):依次从对象中把一个个元素取出来的过程
可迭代对象的数据类型:str、list、tuple、dict、set 等
1.1 可迭代对象的条件
(满足了这两个条件也可以称为可迭代对象):
1、对象实现了__iter__()方法
2、__iter__() 方法返回了迭代器对象
1.2 for 循环工作原理
1、先通过__iter__() 获取可迭代对象的迭代器
2、对获取到的迭代器不断调用__next__() 方法来获取下一个值并将其赋值给临时变量 i
1.3 isinstance()
判断一个对象是否是可迭代对象或者是一个己知的数据类型
导入模块:
from collections.abc import Iterable # 导入模块
isinstance(o,t) o:对象,t:类型,可以是直接或者间接类名、基本类型或者元组
eg:
from collections.abc import Iterable # 导入模块
# 示例对象
my_list = [1, 2, 3]
my_str = "hello"
my_int = 42
# 判断是否是可迭代对象
print(isinstance(my_list, Iterable)) # 输出: True
print(isinstance(my_str, Iterable)) # 输出: True
print(isinstance(my_int, Iterable)) # 输出: False
在这个例子中,my_list 是一个列表,my_str 是一个字符串,它们都是可迭代对象,因此 isinstance() 返回 True。而 my_int 是一个整数,不是可迭代对象,所以 isinstance() 返回 False。
此外,还可以使用 isinstance() 来判断一个对象是否是某个具体的数据类型,比如列表、元组、字典等:
# 判断是否是列表
print(isinstance(my_list, list)) # 输出: True
# 判断是否是元组
my_tuple = (1, 2, 3)
print(isinstance(my_tuple, tuple)) # 输出: True
# 判断是否是字典
my_dict = {'a': 1, 'b': 2}
print(isinstance(my_dict, dict)) # 输出: True
二、迭代器 Iterator
含义:迭代器是一个可以记住遍历位置的对象,迭代器对象从集合的第一个元素开始访
问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
2.1 __iter__() 和 __next__()
迭代器有两个基本的方法:__iter__() 和 __next__()
__iter__() 方法:返回迭代器对象本身
__next__() 方法:返回容器的下一个元素,并将其移动到下一个位置,如果容器中没有更多的元素,则返回一个StopIteration异常
步骤:
1、iter() 调用对象的__iter__(),并把__iter__() 方