可迭代对象、迭代器和生成器

迭代器和可迭代对象

可迭代对象:简单可以理解为用for循环的对象,比如list,字符串,字典等
迭代器:Iterable类型,主要解决内存占用问题,比如list在内存中是一下子释放,而迭代器是一个个释放
迭代器:快速创建一个迭代器

判断是否是可迭代对象:
方法一:isinstance(obj,Iterable)
方法二:看有没有__iter__方法

判断是不是迭代器
方法一: isinstance(obj,Iterator)
方法二: 看对象有没有 __iter__属性和__next__属性

如何实现一个迭代器:
1.迭代器类型必须实现__iter__和 __next__方法
2. __iter__方法必须 返回 self
3. __next__必须返回下一个值,如果没有下一个则抛出StopIterator异常

示例:实现一个迭代器:Next(a,b),传入3,9,返回3,4,5,6,7,8,9

class Next(object):
    def __init__(self,a,b):
        self.a = a
        self.b = b
    def __iter__(self):
        return self
    def __next__(self):
        if self.a < self.b:
            self.a = self.a+1
        else:
            raise  StopIteration
        return self.a

创建对象运行一下

if __name__ == '__main__':
    iterator = Next(2,9)
    for i in iterator:
        print(i)

运行结果
在这里插入图片描述

用生成器实现上述功能

def next(c,d):
    for item in range(c,d):
        yield item+1

运行结果同上

生成器知识点:
生成器的意义: 为了快速方便地创建一个迭代器,所以生成器一定是一个迭代器
yield的关键字:来实现快速创建迭代器
yield怎么用: 在函数中用,用法类似return,区别为到return函数就终止了,而yield是暂时跳出函数
如果一个函数中有yield关键字,调用函数的时候不会执行函数的内容,会返回一个对象(这个对象类型是生成器类)
生成器如何运行: 当要访问生成器的__next__方法时,函数会编程running状态,当执行完yield时,函数变成非running状态(即挂起), 只有再次执行生成器对象的__next__方法时函数才会被唤醒

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值