Python 迭代器【iterator】
# 1.迭代器 iterator --> 用来遍历数据 【我们日常的软件都是不断迭代的】【可以通过for循环遍历的对象都是可迭代对象】
tmp_list = [1, 2, 3, 4, 5, 6]
# mac command + 单击 可查看源码
# iter() 这个内置函数用来获取一个 可迭代对象 的迭代器
lst_iter = iter(tmp_list) print(lst_iter) # <list_iterator object at 0x10be82430>
# 通过迭代器读取数据时,需要使用 next() 该函数每次执行一次,就会通过迭代器读取一个数据
print(next(lst_iter)) print(next(lst_iter)) print(next(lst_iter)) print(next(lst_iter)) for n in lst_iter: print(n)
# 迭代器好处:更加节省内存 类似range
# 自己实现一个迭代器
class TestIterator: def __init__(self): self.num = 0 def __next__(self): # 迭代器中都含有一个 __next__ 方法,当我们通过next()来读取数据时,实际就是调用迭代器的__next__ self.num += 1 if self.num >= 11: # 迭代器中手动终止迭代,需要手动抛出 StopIteration raise StopIteration return self.num def __iter__(self): # 一个对象是不是可迭代对象,就看它有没有实现 iter 特殊方法,且返回的必须是迭代器 # return iter('test') # 用来构建测试 return self ti = TestIterator() ti_ = iter(ti) # iter() 只能获取可迭代对象的迭代器 for n in ti_: print(n)
# 自己实现一个range
class MyRange: def __init__(self, end, start=-1): self.start = start self.end = end def __iter__(self): return self def __next__(self): self.start += 1 if self.start >= self.end: raise StopIteration return self.start mr = MyRange(10) print("self make a test range.........") for n in mr: print(n)