python之路(6)迭代器和生成器

 目录

  • 迭代器(Iterator)
  • 生成器(Generator) 

  迭代器

  1. 迭代器协议:对象提供一个next方法,执行该方法要么返回下一项,要么引起一个Stopiteration异常
  2. 可迭代对象:实现了可迭代协议的对象(内部对象定义了_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))#每次返回一个元素

  

  

原文地址:https://www.cnblogs.com/shuzhixia/p/9797021.html