迭代器

迭代器

一、什么是迭代器

拥有__iter__方法和__next__方法的对象就是迭代器
1.迭代
迭代是访问集合元素的一种方式,可以将某个数据集内的数据“一个挨着一个的取出来”,就叫做迭代。
2.可迭代协议
协议就是互相规定好的。可迭代协议的定义非常简单,就是内部实现了__iter__方法。
3.迭代器协议
必须拥有__iter__方法和__next__方法。

思考:
1.列举能被for循环的内容
list dic str set tuple f.open() range() enumerate
2.dir()方法获取对应数据类型的所有方法。
例如:print(dir([]))
3.查看[],{},’’,range()共有的方法:使用集合的交集进行获取。
找到了__iter__方法。有此方法的对象就是一个可以被迭代的对象。

# 查看共有方法
ret = set(dir([])) & set(dir({})) & set(dir('')) & set(dir(range(4)))
print(ret) # 找到了__iter__

# 循环整数
for i in 123: # TypeError: 'int' object is not iterable
    pass

# 判断int类型是否有__iter__方法,返回False
print('__iter__' in dir(int))

# 只要含有__iter__都是可迭代的。

__iter__方法的作用是返回一个迭代器

一个列表执行了__iter__()方法后返回值就是一个迭代器
print([].__iter__()) 
# <list_iterator object at 0x0000000001D4EA58>

打印一下迭代器中的方法
发现迭代器中的方法比列表中的方法少了

print(dir([]))
print(dir([].__iter__()))

求差集,找到__iter__()函数特有的方法

print(set(dir([].__iter__()))-set(dir([])))
 # {'__length_hint__', '__next__', '__setstate__'}
print([1,2,3].__iter__().__length_hint__()) # 元素个数
lst = ['A','B','C','D']
iterator = lst.__iter__() # 获取迭代器
print(iterator.__next__()) # 获取A元素
print(iterator.__next__()) # B
print(iterator.__next__()) # C
print(iterator.__next__()) # D

二、for循环原理

1.for循环一个可迭代的对象(实现__iter__方法)
2.__iter__方法返回一个迭代器(迭代器实现了__iter__方法和__next__方法)
3.for先判断对象是否可迭代,然后调用迭代器的__next__方法获取值。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值