目录
- 迭代器(Iterator)
- 生成器(Generator)
迭代器
- 迭代器协议:对象提供一个next方法,执行该方法要么返回下一项,要么引起一个Stopiteration异常
- 可迭代对象:实现了可迭代协议的对象(内部对象定义了_iter_()方法)
name = 'chen' test_iter = name.__iter__()#生成一个可迭代对象 print(test_iter) test_iter._next_() 返回: <str_iterator object at 0x000001E9FD822550>
注:for循环的本质是调用对象的next()方法和处理了Stopiteration异常操作 for i in name: print(i)
(除了for循环,map函数,reduce函数,sum函数都遵循可迭代协议)
文件的迭代读取
f = open('demo.txt','rb') #注:实际调用了f._iter_(),得到一个迭代器 for i in f: print(i)
生成器
相当于一种数据类型,自动实现类可迭代协议,所以生成器也是可迭代对象
- 生成器函数
def test(): yield 1 #相当于return,但是可以返回多次 yield 2 yield 3 g = test() print(g) #返回:<generator object test at 0x000002519608F750>
- 生成器表达式
app_test =['苹果%s' %i for i in range(9999999)]#这个列表将占用大量内存 generator_list = ('苹果%s' %i for i in range(9999999))#用生成器可以避免内存占用,每次返回一个元素 print(next(generator_list)) print(next(generator_list)) print(next(generator_list))#每次返回一个元素