python迭代器与生成器

迭代器

从技术上来说,循环对象和for循环调用之间还有一个中间层,就是要将循环对象转换成迭代器(iterator)。这一转换是通过使用iter()函数实现的。但从逻辑层面上,常常可以忽略这一层,所以循环对象和迭代器常常相互指代对方。

迭代器

从技术上来说,循环对象和for循环调用之间还有一个中间层,就是要将循环对象转换成迭代器(iterator)。这一转换是通过使用iter()函数实现的。但从逻辑层面上,常常可以忽略这一层,所以循环对象和迭代器常常相互指代对方。

 

生成器

生成器(generator)的主要目的是构成一个用户自定义的循环对象。

生成器的编写方法和函数定义类似,只是在return的地方改为yield。生成器中可以有多个yield。当生成器遇到一个yield时,会暂停运行生成器,返回yield后面的值。当再次调用生成器的时候,会从刚才暂停的地方继续运行,直到下一个yield。生成器自身又构成一个循环器,每次循环使用一个yield返回的值。

 

下面是一个生成器:

复制代码
def gen():
    a = 100
    yield a
    a = a*8
    yield a
    yield 1000
复制代码

该生成器共有三个yield, 如果用作循环器时,会进行三次循环。

for i in gen():
    print i

 

再考虑如下一个生成器:

def gen():
    for i in range(4):
        yield i

它又可以写成生成器表达式(Generator Expression):

G = (x for x in range(4))

 

迭代器可进行多次遍历,例如列表,迭代器生成的对象遍历完了之后就没有了

G = (x for x in range(4))
for i in G:
print(i)
for i in G:
print(i)

0
1
2
3

 

G = [x for x in range(4)]
for i in G:
print(i)
for i in G:
print(i)

0
1
2
3
0
1
2
3

 

posted @ 2020-06-12 10:52  愤怒的乌鸦  阅读(156)  评论(0)    收藏  举报