python中迭代器和生成器

Posted C~K

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python中迭代器和生成器相关的知识,希望对你有一定的参考价值。

下面用

用一幅图来概括:

 


迭代器理解
迭代是Python最强大的功能之一,是访问集合元素的一种方式。
迭代器是一个可以记住遍历的位置的对象。
迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
迭代器有两个基本的方法:iter() 和 next()。
字符串,列表或元组对象都可用于创建迭代器:
任何实现了__iter__和__next__()方法的对象都是迭代器。__iter__返回迭代器自身,__next__返回容器中的下一个值

实现的方法

\'\'\'
迭代器
\'\'\'

class iterdemo():
def __init__(self):
self.number = 1


def __iter__(self):
print(\'iter!\')
return self


def __next__(self):
print(\'next!\')
self.number = self.number + 1
return self.number

n = iterdemo()
print(n)

for i in n:
print(i)

生成器
生成器是一种特殊的迭代器,它的返回值不是通过return而是用yield
生成器算得上是Python语言中最吸引人的特性之一,生成器其实是一种特殊的迭代器,不过这种迭代器更加优雅。它不需要再像上面的类一样写__iter__()和__next__()方法了,只需要一个yiled关键字。 生成器一定是迭代器(反之不成立)

方式一:

gen = (x + 2 for x in range(10))
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))
print(next(gen))

方式二

#每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。

def gen():
    i = 1
    print(\'i=\', i)
    yield i
    i = i + 1
    print(\'i=\', i)
    yield i
    i = i + 1
    print(\'i=\', i)
    yield i
    i = i + 1
    print(\'i=\', i)
    yield i


n = gen()
next(n)
next(n)
next(n)
next(n)

结果是: <generator object number at 0x005E4F60>说明是生成器

以上是关于python中迭代器和生成器的主要内容,如果未能解决你的问题,请参考以下文章

Python中迭代器和生成器的区别与联系

Python之迭代器和生成器

python中迭代器和生成器。

python的生成器与迭代器和可迭代对象

Python/迭代器和生成器

1.17 Python基础知识 - 迭代器和生成器初识