前言
可迭代对象,迭代器,生成器,相信许多学习Python的小伙伴或多或少都听说过,但你真的知道他们的区别吗?真的知道为什么需要这些概念吗?
本文带你深入了解一系列相关机制,不仅告诉你概念,还告诉你为什么需要这些概念,让你可以举一反三。
本文重点
Python在for遍历时做了什么?为什么需要迭代器?生成器为什么不能重复使用?Python的动态协议,不一样的迭代实现。
本文字数1900+,不适合初学者,阅读本文需要你有以下Python基础知识:
for循环没有你想象中的那么简单
能够看到这里的小伙伴必定已经很熟悉for循环,但你可能不知道Python在背后为你做了许多事情。
用一个简单例子来说明一下,当前有一个列表,里面装着4个数字,我们需要把数字逐一打印出来。
如下图,分别用两种方式实现:
行5-行7,第一种方式,通过索引访问列表行10-行11,直接通过for遍历。大家有想过吗?为什么第二种方法,不需要一个变量 i 来记录当前读取位置呢。
答案是,不管什么方式,其实都需要在遍历过程保持一个状态值,以表示现在遍历到哪个元素。
但是为什么我们平时使用的for循环却不需要呢?
因为