python3--迭代器

可迭代的

  •  可被for循环的数据类型
  •  可迭代协议:内部实现了__iter__()
  • # 列表是可迭代的,但非迭代器
    print('__iter__' in dir([]))  # True
    print('__next__' in dir([]))  # False

     

迭代器Iterator

  • 迭代器协议:内部实现了__iter__()和__next__()
  • 迭代器优点:节省内存

常用方法

  • 列表迭代器:[].__iter_()
  • from collections.abc import Iterator
    print(isinstance([].__iter__(),Iterator))  # True,列表迭代器

     

  • 获取列表迭代器中的所有方法:dir([].__iter_())
  • 获取列表中的所有方法:dir([])
  • 列表迭代器比列表中多的方法:{'__setstate__', '__length_hint__', '__next__'}
  • lis1 = dir([])
    lis2 = dir([].__iter__())
    print(set(lis2)-set(lis1))   # {'__setstate__', '__length_hint__', '__next__'}
    
    lisiter = [6,9,8].__iter__()  # 列表迭代器
    print(lisiter.__length_hint__())  # 3 获取迭代器中的元素个数
    lisiter.__setstate__(1)  # 指定开始迭代位置
    print(lisiter.__next__())  # 9 取迭代位置的值

     

  • for循环,通过内部调用__next__()一个一个的取值

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值