Python为我们提供了一些特殊的方法,我们可以重写这些方法实现自己的功能。今天介绍python中的迭代器和生成器。
迭代器
1.首先看个例子:
当我们调用for语句遍历序列dd的时候,for语句通过调用iter()方法获得迭代器对象,然后通过该对象的next()方法逐一访问元素,当没有元素时,抛出StopIteration异常,结束程序。以下是其工作原理的示意:
2.现在我们可以模仿着写自己的迭代器。首先,我们的迭代器要有next()方法用于返回值,其次要重写__iter__()方法,该方法要返回一个带有next()方法的对象(iter()内建函数通过调用__iter__()方法实现。)
下面是我自定义的一个迭代器,打印1-9的平方值:
程序运行结果:
可以看到,首先调用__iter__方法返回迭代器对象fibs, 然后不断调用next()方法返回元素,直到程序抛出异常。
生成器
如果我们的迭代器的算法比较简单,可以通过生成器实现,而不需要编写next()方法,抛出异常等。
我们来看个例子:
我们定义了一个函数,该函数中包含yield语句。包含yeild语句的函数为生成器。
1.函数执行时,遇到yeild,会返回一个generator对象,函数暂停并记住该中断点。
2.若使用generator对象调用next()方法,函数会从中断点继续执行。
3.每次调用next()方法会返回yeild后面的表达式,然后函数再次暂停。
4.生成器函数执行完毕会自动返回StopIteration异常。
下面的例子用于遍历序列的每一个元素并输出
运行结果是