首页 > 编程 > Python > 正文

Python通过for循环理解迭代器和生成器实例详解

2020-02-16 01:10:56
字体:
来源:转载
供稿:网友

本文实例讲述了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))            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表