1.定义
Iterable可迭代对象
实现了__iter()__方法的object都是iterable。
Iterator迭代器
1.迭代器是一个对象,该对象代表了一个数据流。
2.重复调用迭代器的__next__方法(或将迭代器对象当作参数传入內置函数next()中)将依次返回数据流中的元素。
3.当数据流中无可返回元素时,则抛出StopIteration异常。
4.迭代器必须拥有__iter__方法,该方法返回迭代器对象自身,通俗的讲就是迭代器对象必须同时实现__iter__()方法和__next()__方法
Generator 生成器
在Python中,生成器是一种特殊类型的函数,用于迭代操作,通过使用关键字yield返回值,节省内存空间。
2.使用方法
2.1 知识引入
python中经常使用for循环迭代列表,并且对于同一个列表,for循环可以迭代多次而不抛出StopIteration异常。什么意思呢?见代码和运行结果:
from collections.abc import Iterable, Iterator
# 首先讲讲列表list
my_list = [1, 2, 3]
print("列表是否为可迭代对象:", isinstance(my_list, Iterable)) # True
for i in my_list:
print("first loop: ", i)
print("------------")
for j in my_list:
print("second loop: ", j)
使用isinstance发现列表对象my_list是可迭代对象同时也是迭代器,并且使用for循环不止可以迭代一次。
为什么我会说这个习以为常的用法?吃饱了撑的(不是)
引入以下问题:
- 什么对象才能使用for循环迭代?
- 如何自定义可迭代对象?
- 如何自定义迭代器?
2.2 Iterable
现在我们自定义一个包含__iter__方法的类
class my_class:
def __iter__(self):
pass
Class = my_class()
# 可以通过isinstance证明my_class这个类不是Iterable,但是其实例化是Iterable
print("Class is Iterable: ", isinstance(Class, Iterable))
print(</