迭代
简单的说,可将某个数据集内的数据依次取出,叫做迭代
可迭代协议
内部实现的_iter_方法
常见的可迭代对象类型
str,list,tuple,dict,set,range,文件句柄
# 查看str是否可迭代
print(dir(str))
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__',
'__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__',
'__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__',
'__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__',
'__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs',
'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier',
'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle
', 'isupper', 'join', 'ljust', 'lower', 'lstrip',
'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split',
'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
判断某对象是不是可迭代对象,有两种方法:
print(‘__iter__’ in dir(str))
from collections import Iterable print(isinstance('abc',iterable) print(isinstance('abc',str))
迭代器定义
内部含有__iter__且含有__next__方法的对象就是迭代器,遵循迭代器协议
- 将可迭代对象转化成迭代器
s1 = 'abcd'
obj_s = s1.__iter__()
- 将可迭代对象转化成迭代器
obj_s = iter(s1)
print(obj_s)
print(obj_s.__next__())
判断当前对象是否是迭代器的两种方法
s1 = 'abc'
print('__iter__' in dir(s1))
print('__next__' in dir(s1))
from collections import Iterator
l1 = [1,2,3]
print(isinstance(l1,Iterator))
l1_obj = l1.__iter__()
print(isinstance(l1_obj,Iterator))
迭代器的好处
- 节省内存
- 惰性机制
- 单向执行,不可逆