python迭代器和生成器

可迭代对象:内部必须有一个__iter__()方法

迭代器:可迭代对象的基础上必须有一个__next__()方法 

next: 是通过实例变量不断记录每次运行推导返回值实现的,下次运行,便可基于上次返回值及推导算法,返回下一个推导值

生成器本质是一个使用了yield返回值的函数,支持使用next()函数不断返回下一个值,同时支持使用send函数向生成器发送消息

生成的这个特性,为解决为优化内存使用效率提供了途径

因为比如一个包含1万个变量的列表,和一个包含推导算法的生成器,其内存占用空间,可能前者是后者的几个数量级倍数,比如下面的

a=[i for i in range(10000)] #运行sys.getsizeof(a)后,为87616

a=(i for i in range(10000))#运行sys.getsizeof(a)后,为112,直接减少了8千倍的内存占用空间
 

def read_file(fpath): 
    BLOCK_SIZE = 1024 
    with open(fpath, 'rb') as f: 
        while True: 
            block = f.read(BLOCK_SIZE) #第一次block指向是一个不可变对象
            if block: 
                yield block            #再次循环block是指向另一个不可变对象
            else:                      #第一个不可变对象 由于引用的次数为0 就被删除啦,
                return                 #所以省空间

详细请看:

python之迭代器和生成器全解--包含实现原理及应用场景_一秋闲谈的博客-CSDN博客_python迭代器的应用场景

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值