迭代器和生成器

迭代器

可迭代对象

  • 集合类数据类型如list、tuple、dict、set、str等
  • 生成器

判断是否可迭代

isinstance([],Iterable)
或查看其是否有__iter__()

迭代器

isinstance([],Iterator)
或查看其是否有__next__()

迭代器的优缺点:

迭代器的优点
  1. 提供了一种不依赖于索引的取值方式
  2. 惰性计算。节省内存

迭代器的缺点:
  1. 取值不如按照索引取值方便
  2. 一次性的。只能往后走不能往前退
  3. 无法获取长度

生成器

生成器函数:函数体内包含有yield关键字,该函数执行的结果是生成器,生成器在本质上就是迭代器。

yield的功能:

  1. 与return类似,都可以返回值,但不一样的地方在于可以有多个yield,每个yield能够返回一次值,而return只能返回一次值就结束了
  2. 为函数封装好了__iter__和__next__方法,把函数的执行结果做成了迭代器
  3. 遵循迭代器的取值方式obj.next(),触发的函数的执行,函数暂停与再继续的状态都是由yield保存的

生成器的使用

def foo(n):
    while n>0:
        yield n
        n_=1
g=foo()

print(g.__next__())
print(g.__next__())
print(g.__next__())

生成器表达式形式

def foo():
    print('starting')
    while True:
        x=yield 
        print('value',x)
g=foo()
print(g.__next__())
print(g.send(1))
posted @ 2017-06-19 20:20  Coder00  阅读(121)  评论(0编辑  收藏  举报