本文实例讲述了Python通过for循环理解迭代器和生成器。分享给大家供大家参考,具体如下:
迭代器
可迭代对象
通过 for…in… 循环依次拿到数据进行使用的过程称为遍历,也叫迭代。我们把可以通过 for…in… 语句迭代读取数据的对象称之为可迭代对象。
- 通过
isinstance()
可以判断一个对象是否可以迭代
# 判断列表print(isinstance([], Iterable)
打印结果为 True 即为可迭代对象。
- 自定义一个能容纳数据的类,测试该类的可迭代性
import collectionsclass MyClassmate(object): def __init__(self): self.names = [] def add(self, name): self.names.append(name)# 创建 MyClassmate对象my_classmate = MyClassmate()my_classmate.add("小王")my_classmate.add("小李")my_classmate.add("小张")# 判断MyClassmate是否为可迭代对象print("是否为可迭代对象:",isinstance(my_classmate, collections.Iterable))# 迭代数据for temp in my_classmate: print(temp)
运行结果:
是否为可迭代对象: False
Traceback (most recent call last):
for temp in my_classmate:
TypeError: 'MyClassmate' object is not iterable
封装一个可以存放多条数据的类型是不可迭代的
何为可迭代对象
我们分析对可迭代对象进行迭代使用的过程,发现每迭代一次(即在 for…in… 中每循环一次)都会返回对象中的下一条数据,一直向后读取数据直到迭代了所有数据后结束。那么,在这个过程中就应该有一个"人"去记录每次访问到了第几条数据,以便每次迭代都可以返回下一条数据。我们把这个能帮助我们进行数据迭代的"人"称为迭代器 (Iterator)。 可迭代对象的本质就是提供一个这样的中间"人"即迭代器帮助我们对其进行迭代遍历使用。 可迭代对象通过__iter__
方法向我们提供一个迭代器,在迭代一个可迭代对象的时候,实际上就是先获取该对象提供的一个迭代器,然后通过这个迭代器来依次获取对象中的每一个数据.1.可迭代对象的本质就是提供一个这样的中间"人"即迭代器帮助我们对其进行迭代遍历使用
2.可迭代对象是一个具备了
__iter__
方法的对象,通过__iter__
方法获取可迭代对象的迭代器
from collections import Iterableclass MyClassmate(object): def __init__(self): self.names = [] def add(self, name): self.names.append(item) def __iter__(self): """空实现该方法""" return None# 创建 MyClassmate对象my_classmate = MyClassmate()my_classmate.add("小王")my_classmate.add("小李")my_classmate.add("小张")# 判断MyClassmate是否为可迭代对象print(isinstance(my_classmate, Iterable))
新闻热点
疑难解答