栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python迭代器、生成器案例解析

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python迭代器、生成器案例解析

1、迭代器 iterator

本质:一个实现了iter方法和next方法的对象

可迭对象iteration:

        list、dict、str、tuple、set是可迭代对象但不是迭代器;

        文件是可迭代对象也是迭代器;

        可迭代对象转为迭代器:从collections中导入模块Iterator,使用 iter(“可迭代对象”)方法

2、迭代器使用条件及特点

        a. 当a 传数据到 b 中 、或是爬虫时从a 采集下来放到b中 然后进行存储;

        b.如果把所有数据丢到列表中 然后再给b 可以 优点 速度快 缺点 列表占内存太大,如果使用迭代器申请固定的空间也就是一个个给到 b 能节约内存,但是浪费时间;

        c.需要用类来写迭代器,需要重写 _ _iter_ _( ) 和 _ _next_ _( )方法;

        d.迭代器最大的特点是,需要用类来写,显得代码冗长,不太方便。

3、迭代器案例展示
class Demo():
    def __init__(self,sum):
        self.sum=sum
        self.n=0
        self.num1=self.num2=1
    # 只要重写了这个魔术方法,这个对象就不是普通的对象了 而是可迭代对象
    def __iter__(self):
        return self

    def __next__(self):
        self.n +=1
        if self.n <= self.sum:
            temp=self.num1
            self.num1 ,self.num2=self.num2,self.num1+self.num2
            return temp
        else:
            raise StopIteration
if __name__ == '__main__':
    feiboo=Demo(10)
    # 内置方法 iter 能够获取到一个可迭代对象的迭代器,demo 就是个迭代器
    iter1=iter(feiboo)
    # 每次只能取一个  因为只是申请了固定的空间
    print(next(iter1))
    print(next(iter1))
    print('='*20)
4、生成器 general

    本质:使用yield返回值函数,使用yield会暂停,使用next()或send()函数恢复;
    yield:是生成器特有的,yield可以看做是return返回的一个值并记录这个返回的位置,下一次迭代会从这个位置开始;
    send和next的区别:send可传递参数给yield表达式,send可以强行修改上一个yield表到式的值

5、生成器案例展示:
def Feibnacci(num):
    count,num1,num2=0,1,1
    while count < num:
        count +=1
        # 生成器特有关键字yield
        yield num1
        num1,num2=num2,num1+num2

f= Feibnacci(100)
print(next(f))
print(next(f))
print(next(f))
print(next(f))
6、总结

        a.凡是可作用于for循环的对象都是Iterable类型;

        b.凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;

        c.集合数据类型如list、dict、str等是Iterable但不是Iterator(迭代器),不过可以通过iter()函数获得一个Iterator对象。

        d.生成器是一种特殊的迭代器

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/887199.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号