python Iterator 迭代器通俗理解

python Iterator 迭代器通俗理解

在详细介绍迭代器的内容之前,这里先介绍一下,迭代器的优点,方便大家在后续使用中,心里清楚为什么大家都推崇使用迭代器。迭代器的优点主要有:

  1. 迭代器是python遍历集合元素的一种强大方式。
  2. 可以节省大量的内存的资源。

1 第一个优点

首先从这两个优点来看迭代器的出现原因,为了更加形象描述迭代器的功能,这里以遍历一个数组为例,介绍为什么迭代器这么重要。假设有一个数组的元素如下:

l = [2,4,5,6,7]

当集合不是迭代器时,我们在编写程序时,会考虑边界条件,这在编程过程中,极易出现错误,且不易于编写。

for (i=0,i<l.size();i++):
    print(l[i])    

当集合时迭代器时,那么代码就可以编写如下所示,这种编码方式,很简洁,不会出现常见的边界错误。

l = [2,4,5,6,7]
for i in l:
    print(i)

2 节省大量的内存

迭代器有个重要的特点,迭代器是一个可以记住遍历位置的对象,就是每次返回一个值,回到上面的例子中,假设l = [2,4,5,6,…,7]中有超过百万的数据,这时在使用时可以不将这个整个数组加载到内存中,只需依据记住的遍历位置,返回元素即可,这样就达到了节省内存的目的。

3可迭代的和迭代器区分

这两者的区别从实现角度看,区别他们是非常简单的,即:

可迭代的:只要实现__iter__()方法的类就是可迭代的对象。

迭代器:即实现了__iter__()方法,又实现了__next__()方法的类,就是迭代器。

总结

  1. 要想自定义一个迭代器,只需实现__iter__()方法和__next__()即可。
  2. 可迭代对象不一定是迭代器。
  3. 迭代器一定是可迭代对象。

4 自定义迭代器

#%%
from collections import Iterable
from collections import Iterator
 
class ClassMate(object):
    """定义一个同学类"""
 
    def __init__(self):
        #定义一个保存姓名的列表
        self.name = list()
        self.name_num = 0
 
    def add(self,name):
        #添加姓名
        self.name.append(name)
    
    def __iter__(self):
        #实现__iter__方法,返回一个迭代器对象
        return self   # 返回本身
 
    def __next__(self):
        #实现__next__方法,从迭代器返回下一项。
       if self.name_num < len(self.name):
           ret = self.name[self.name_num]
           self.name_num += 1
           return ret

        # 抛出异常,当循环后自动结束
       else:
           raise StopIteration
 
 
class1 =  ClassMate()
class1.add("张三")
class1.add("李四")
class1.add("王五")
class1.add("tom")
 
print("判断是否是可迭代的对象:", isinstance(class1,Iterable))
print("判断是否是迭代器:", isinstance(class1,Iterator))
for name in class1:
    print(name)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值