前言
小伙伴们迭代器和生成器是 python 面试的时候,被问概率较高的一个知识点,很多小伙伴都不太分得清这两者的区别,今天就来给大家详细的讲解迭代器和生成器的区别。
一、可迭代对象
在讲解迭代器和生成器之前,我们得先说说可迭代对象,所谓的可迭代对象就是能够通过 for 循环迭代,逐一返回其成员项的对象称为可迭代对象, python 中可迭代对象包括
- 1、所有序列类型 :如 list、 str 和 tuple、range
- 2、非序列类型: dict、set、文件对象
- 3、实现了 __iter__() 方法的任意对象
- 4、实现了序列语义的 __getitem__() 方法的任意对象。
二、for 循环迭代到底干了啥?
1、 __iter__() 方法
__iter__() 在 python 中也被称作迭代协议,只要对象拥有 __iter__() 方法,那么该对象就实现了迭代协议,就可以进行迭代操作。
另外 __iter__() 方法的返回值,必须是一个迭代器(迭代器下章详细讲解)。
python 中的 list、str、tuple、dict、set 等类型都实现了 __iter__() (迭代协议),所以能够直接进行遍历。
当我们用 for 去遍历任何一个对象时,for 循环执行的时候,会先去调用对象的 __iter_