欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

迭代器是什么鬼?

程序员文章站 2024-03-17 19:30:04
...

1. 那些数据类型支持迭代 

# 	srt,list,tuple,dict,set,句柄,range

  

2. 迭代器本质

# lst = ['皇阿玛','皇额娘','容嬷嬷','紫薇']
# it = lst.__iter__()     # lst的迭代器
# while 1:
# 	try:
# 		name = it.__next__()    # 循环拿下一个值
# 		print(name)
# 	except StopIteration:
# 		break

 

3. 如何判断一个对象是否支持迭代

# 方法一
# 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__"就表示支持迭代

 # 方法二

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.不能反复,本次迭代只能往下进行,不能回退或跳过