首页 > 代码库 > python迭代器与生成器

python迭代器与生成器

一、迭代

  1.重复

  2.下一次重复是基于上一次结果

二、迭代器

  python为了提供一种不依赖于索引的迭代方式,python会为一些对象内置__iter__方法,obj.__iter__称为可迭代的对象,obj.__iter__得到的结果就是迭代器,得到的迭代器既有__iter__,也有一个__next__方法

d={a:1,b:2,c:3}

i=d.__iter__() #i叫迭代器
print(i.__next__())

三、迭代器的优缺点

  1.优点:

    1)提供了一种不依赖于索引的取值方式

    2)惰性计算,节省内存

  2.缺点

    1)取值不如按照索引取值方便

    2)一次性的,只能往后走不能往前推

    3)无法预知长度

四、生成器

  1.生成器函数:函数体内包含有yield关键字,该函数执行的结果是生成器函数

  2.生成器就是迭代器

def foo():
    print(first---------->)
    yield 1
    print(second---------->)
    yield 2
    print(third---------->)
    yield 3
    print(fouth---------->)

g=foo()

print(g.__next__())
print(g.__next__())
print(g.__next__())
print(g.__next__())
yield的功能:
1.与return类似,都可以返回值,但不一样的地方在于yield返回多次值,而return只能返回一次
2.为函数封装好了__iter__和__next__方法,吧函数的执行结果做成了迭代器
3.遵循迭代器的取值方式obj.__next__(),触发函数的执行,函数暂停与再继续的状态都是由yield保存
def countdown(n):
    print(starting countdown)
    while n > 0:
        yield n
        n-=1
    print(stop countdown)
g=countdown(5)

for i in g:
    print(i)

 

python迭代器与生成器