python中的迭代器

目录

一.什么是迭代器

二、for循环原理

三、迭代器作用

四、应用场景


一.什么是迭代器

拥有__iter__方法和__next__方法的对象就是迭代器

 

1、迭代

迭代是访问集合元素的一种方式,可以将某个数据集内的数据“一个挨着一个的取出来”,就叫做迭代。

 

2、可迭代协议

协议就是互相规定好的。可迭代协议的定义非常简单,就是内部实现了__iter__方法。

 

3、迭代器协议:必须拥有__iter__方法和__next__方法。

 

  • 列举能被for 循环的内容

list、dic、str、set、tuple、f.open()、range()、enumerate

 

  • dir()方法获取对应数据类型的所有方法。

dir() 获取对应数据类型的所有方法,带有下划线的方法叫双下方法。

例如:print(dir(list))

 

  • 查看 [],{},'',range() 共有的方法:使用集合的交集进行获取。

找到了__iter__ 方法。有此方法的对象就是一个可以被迭代的对象。

 

  • __iter__方法的作用是返回一个迭代器。

 

二、for循环原理

1.for循环一个可迭代的对象(实现__iter__方法)

2.__iter__方法返回一个迭代器(迭代器实现了__iter__方法和__next__方法)

3.for先判断对象地方可迭代,然后调用迭代器的__next__方法获取值。

 

三、迭代器作用

节约内存,取得时候再生成数据,python2.7的时候range()方法就立刻生成了数据,占用了大量的内存空间。

四、应用场景

1、数据类型转换 例如 list和元组之间的转换底层就是使用的迭代器

 

import time


class Names(object):
    def __init__(self):
        self.lst = []

    def add_name(self, name):
        self.lst.append(name)

    def __iter__(self):
        return NamesIterator(self.lst)


class NamesIterator(object):
    def __init__(self, lst):
        self.lst = lst
        self.current_num = 0

    def __iter__(self):
        pass

    def __next__(self):
        if self.current_num < len(self.lst):
            name = self.lst[self.current_num]
            self.current_num += 1
            return name
        else:
            raise StopIteration


names = Names()
names.add_name('ls')
names.add_name('zs')
names.add_name('ww')

for i in names:
    time.sleep(1)
    print(i)

输出为:

ls
zs
ww

如上代码所示,用__iter__方法赋予了Names类迭代属性,并返回了NamesIterator类。其中NamesIterator类添加了__next__方法,使其变成一个完整的迭代器,当然我们也可以直接在Names类的添加__next__方法。所以最后names对象实例继承了Names类的可迭代属性,可以被for使用

CCF大数据与计算智能大赛-面向电信行业存量用户的智能套餐个性化匹配模型联通赛-复赛第二名-【多分,embedding】.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计,皆可应用在项目、毕业设计、课程设计、期末/期/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值