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.生成器是一种特殊的迭代器

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值