迭代器是什么鬼?
1. 那些数据类型支持迭代
1 | # srt,list,tuple,dict,set,句柄,range |
2. 迭代器本质
1 2 3 4 5 6 7 8 | # lst = ['皇阿玛','皇额娘','容嬷嬷','紫薇'] # it = lst.__iter__() # lst的迭代器 # while 1: # try: # name = it.__next__() # 循环拿下一个值 # print(name) # except StopIteration: # break |
3. 如何判断一个对象是否支持迭代
# 方法一
1 2 3 4 5 6 7 8 9 10 11 12 13 | # lst = [1,2,3,4,5] # print(dir(lst)) # 结果: # ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', # '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', # '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', # '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', # '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', # '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', # 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', # 'remove', 'reverse', 'sort'] # 这里面是列表支持的所有功能,其中"__iter__"就表示支持迭代 |
# 方法二
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | st = [ 1 , 2 , 3 , 4 , 5 ] it = lst.__iter__() # "it"就是列表"lst"的迭代器 from collections import Iterable from collections import Iterator print ( isinstance (lst,Iterable)) # 判断这个对象是否可迭代 # 结果:True print ( isinstance (lst,Iterator)) # 判断这个对象是不是一个迭代器 # 结果:False print ( isinstance (it,Iterable)) # 结果:True print ( isinstance (it,Iterator)) # 结果:True print ( dir (it)) ### 从上面的判断可以看出,支持迭代的对象不一定是迭代器,迭代器一定支持迭代 |
4.迭代器的总结
# Iterable:可迭代对象,内部包含"__iter__()"函数
# Iterator:迭代器,内部包含"__iter__()"和"__next__()"
# 特点:
# 1.节省内存
# 2.惰性机制
# 3.不能反复,本次迭代只能往下进行,不能回退或跳过
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步