python实现设计迭代器指南(含样例启发)

本博文源于python基础,旨在实现如何完成一个迭代器。首先大家不要对迭代器感到陌生。迭代器就是for能遍历的对象,而且需要大家懂一点面向对象的知识,这是基础。

迭代器必备两种属性

大家在自己设计迭代器的时候,一定要遵守迭代器协议。所谓迭代器协议就是要有两个属性
在这里插入图片描述
前者返回对象本身,它是for语句使用迭代器的要求
后者返回容器中下一个元素或数据。当容器中的数据用尽时,应该引发StopIteration异常。
任何一个类,只要它实现了或具有这两个方法,就可以称其为迭代器,也可以说是可以迭代的。在使用它作为迭代器时,就可以用for来遍历:

for item in iterator:
	pass

手动实现__iter__

刚才我们上面说了__iter__是指对象本身,那么我们在设计的时候用类构造,然后在类中定义该iter方法就行了。定义好方法,写些什么语句呢?根据公约返回对象本身,因此可以这样写

    def __iter__(self):
        return self

手动实现__next__

也就是返回下一个元素或数据,你是想让数据怎样的操作呢,是两倍或者三倍还是平方都是可以自己选择。在这个方法中,就需要脑洞大开,根据自己的业务需求实施了,这里就来一个是容器的两倍next

    def __next__(self):
        if self.__x and self.__x != 1:
            self.__mul *= self.__x

代码友好性须知

作为类要有__init__

这个初始化是类的标准素养,默认属性更加友好哟!

作为迭代器到了迭代结束抛出异常哟!

这个有StopIteration异常可以设置
下面就来看一下样例启发一下思路吧!

例子:自定义一个迭代器实现2的n次方值,最大不超过100

class MyIterator:

    def __init__(self,x=2,xmax=100):
        self.__mul, self.__x = x,x
        self.__xmax = xmax

    def __iter__(self):
        return self

    def __next__(self):
        if self.__x and self.__x != 1:
            self.__mul *= self.__x
            if self.__mul <= self.__xmax:
                return self.__mul
            else:
                raise StopIteration
        else:
            raise StopIteration

if __name__ == '__main__':
    myiter = MyIterator()
    for i in myiter:
        print('迭代的数据元素:',i)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值