可迭代对象:迭代器、生成器、序列、字典
一、迭代器
迭代器:实现了迭代协议的对象
迭代协议:_ _iter_ _:返回迭代对象本身
_ _next_ _:返回可迭代对象的下一个元素
一个完整的迭代器最终要抛出异常(StopIteration)结束,否则将进入无限循环
#通过使用迭代器模拟for函数
class MyIterator:
def __init__(self, stop):
self.start = -1 #开始值为-1 否则__next__中if 达不到判断,提前结束循环
self.stop = stop
def __iter__(self): #返回迭代对象本身
return self
def __getitem__(self, item): #使用下标访问 调用__getitem__ 方法
return self.start + item + 1
def __next__(self):
self.start = self.start + 1
if self.start < self.stop:
return self.start
else:
raise StopIteration #抛出异常,停止循环
data = MyIterator(10)
for i in data:
print(i)
二、生成器
generator: 生成器
生成器函数:定义了一个函数,且函数有使用yield
生成器:执行函数返回的就是生成器
def yield_test():
yield "yield"
data = yield_test() #data是一个generator(生成器), 也是一个迭代器
print(data, type(data))
print(next(data)) #next(data)就是去访问__next__(), 带有__next__()的是迭代器
生成器的执行:
1、send 生成器内部方法: 生成器对象.send(None)
2、next 内置方法,next(生成器对象)
生成器也是一个迭代器,可以使用迭代器的功能