迭代器和生成器

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异常。

下面的例子用于遍历序列的每一个元素并输出

运行结果是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值