python迭代器与可迭代对象

  1. 实现了 __iter__ 方法的对象称为可迭代对象
  2. 实现了 __iter__ 和 __next__ 方法的对象称为迭代器对象,官方文档称为迭代器协议
  3. for...in...语句可以自动将可迭代对象变为迭代器,当 in 后的对象为一个迭代器时,会调用该对象的 __iter__  两次
  4.  str,list,turpe,dict等均为可迭代对象

关系图

class MyIter: # 这是一个迭代器

# 实现了 iter 和 next 两个方法的对象称为迭代器对象
    def __init__(self):
        """初始化跌代的值,也可以直接写在—__iter__内"""
        self.a = 1

    def __iter__(self):
        """使用类成为一个可迭代对象
            不写 return self 会报如下错
            TypeError: iter() returned non-iterator of type 'NoneType'
            
        """
        print('iter')
        return self

    def __next__(self):
        """跌代的实现,返回值是输出的值"""
        if self.a <=20:
            x=self.a
            self.a += 1
            print("next")
            return [x]+["1",]
        else:
            raise StopIteration

class MyList: # 这是一个可迭代对象
    def __init__(self):
        pass

    def __iter__(self):
        # 实现了 iter 方法的对象称为可迭代对像
        return MyIter()


if __name__ == '__main__':
    c=MyList() # 实例可迭代对象
    
    # a=MyList() # 实例可迭代对象
    # c=iter(a) #返回迭代器对象        
    # print(c.next())  # 可迭代对象只有变成迭代器对象才能调用next方法
    # print(c.__next__())
    # print(c.__next__())
    # print(c.__next__())

    for x in c:  # for可以调用可迭代对象,自动将可迭代对象变为迭代器对象
        print(x)

参考:

Python可迭代对象,迭代器,生成器的区别_LiangJishengBlog-CSDN博客_可迭代对象

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值