python 的迭代器/生成器学习总结(1)
最近在看视频学习python,在讲到迭代器和生成器的时候,觉得非常棒,因此总结记录一下,以便于后续理解。
迭代器
迭代是访问集合元素的一种方式。迭代器是一个能够记住遍历位置的对象。迭代器从集合元素的第一个位置开始访问,直到所有元素被访问完结束。迭代器只能往前,不能后退。 迭代器是用在for循环代码中的。
迭代器的实现
迭代器必须实现2个方法,一个是__iter__ 方法,一个是__next__ 方法。如果一个类仅仅只有__iter__ 方法,就说这个类是可迭代的。
例如:
from collections import Iterable, Iterator
import collections
class testA():
def __init__(self):
self.names = list()
def add(self, name):
self.names.append(name)
def __iter__(self):
return self
class testB():
def __init__(self):
self.names = list()
self.current_num = 0
def add(self, name):
self.names.append(name)
def __iter__(self):
return self
def __next__(self):
if self.current_num < len(self.names):
ret = self.names[self.current_num]
self.current_num = self.current_num + 1
return ret
else:
raise StopIteration
def main():
a = testA()
b = testB()
print(isinstance(a, Iterable))
print(isinstance(b, Iterable))
print(isinstance(a, Iterator))
print(isinstance(b, Iterator))
a.add("a1")
a.add("a2")
b.add("b1")
b.add("b2")
print(len(b.names))
#for i in a:
# print(i)
# TypeError: iter() returned non-iterator of type 'testA'
for j in b:
print(j)
if __name__ == '__main__':
main()