本文主要讲两个方面的东西,一个是迭代方面,对应是生成器,语法是yield。另一个方面是异步编程,对应是协程,语法是async。
yield
首先生成器是用来迭代的。所以要先弄清可迭代的,容器,迭代器,生成器的关系。
简单来说,可以for i in x这样用的x就是可迭代的。它包括容器和迭代器。
容器
容器就像列表,可以放数据,为什么可以放for里面迭代呢,方便吧。
迭代器
迭代器就是实现__iter__()和__next__()的,__iter__返回自己,__next__返回迭代的下一个值。在for里其实是隐式调用了__next__()。
class Iterator:
def __init__(self):
self.data = 0
def __iter__(self):
return self
def __next__(self):
self.data += 1
if self.data > 5:
raise StopIteration
return self.data
if __name__ == '__main__':
I = Iterator()
try:
for i in I:
print(i)
except StopIteration:
pass
迭代器迭代完了后继续调用__next__()结合触发StopIteration错误。
生成器
生