目录:
一、迭代器
二、生成器
一、迭代器
我们提一下先提迭代的概念:迭代即为循环遍历,任何遍历的过程都是可以称作迭代。Python中序列、集合、字典、文件和生成器等都是可迭代的,任何可迭代对象都可以作用于for循环。
首先我们来借助最基本的两个内置函数来完成一个简单的迭代器。
我们可以看到触发了StopIteration异常,StopIteration 异常用于标识迭代的完成,防止出现无限循环的情况,所以我们做如下改写:
但,for循环却自带异常处理机制:
类中迭代器的使用
然后我们来拓展一下关于类中的迭代器,之前大家应该也已经留意到了,类中是内置了迭代器的专有方法的。
当然,我们最后的输出完全可以使用for循环将迭代器中的内容读出来,输出相同。
或者使用while循环,不过依然要添加异常处理:
二、生成器
而生成器是一个简单的方式来完成迭代,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。
觉得上面的概念太抽象?我们借助实例来解释~几乎所有相关教程都在扯著名的斐波那契数列,我们就不!
说起生成器的创建,常用两种方法,一种是改写列表生成式,一种是使用yield。
列表生成式
列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式,其实我们之前就有在使用了。
顾名思义,它生成了一个列表,那么如何改写为生成器呢?
我们可以看到,当前类型已经变为'generator',即生成器类型。改写方法就是将替换为。
接下来我们尝试使用一下:
yield
在python中,任何使用了 yield 的函数都被称为生成器(generator)或生成器函数。
这里往上翻一下,你会发现它与类中迭代器的使用中的例子功能是一致的,但那里用了近20行代码,然而生成器却只用了三行代码,这就是我们为什么说生成器是使用简单的方式进行迭代。
说到底,生成器就是一种特殊的迭代器,这也就是为什么这一章节题目如此简单:《迭代》。
领取专属 10元无门槛券
私享最新 技术干货