您的位置:首页 > 编程语言 > Python开发

python中的生成器和迭代器

2017-07-26 11:38 423 查看
一、迭代器

可以用于for语句进行循环的对象就是可迭代对象,例如内置数据类型list、dict、tuple、str等。

我们也可以构建自己的迭代器,包含一系列元素,也可以通过for循环取出元素,也可以使用next()方法。使用迭代器的好处是:当数列长度过大时,可以减少内存消耗,因为每次只返回一个值。

二、产生迭代器的三种方法

1. iter()和next()方法

迭代器例子:

class Container(object):
def __init__(self, start_num=0, end_num=0):
'''
Constructor
'''
self.start = start_num
self.end = end_num

def __iter__(self):
print "create an iterator"
return self
# python2.x用next(),python3.x用__next__()
def next(self):
print "calling next method"
if self.start < self.end:
i = self.start
self.start += 1
return i
else:
raise StopIteration()
if __name__ == "__main__":
c = Container(0, 3)
for x in c:
print x

输出结果:
create an iterator
calling next method
0
calling next method
1
calling next method
2
calling next method


生成器

可以通过三种方式得到生成器,一种是yield方法。程序执行到yield后返回值,并暂停,直到下次被访问,从上次暂停的位置开始继续执行。

def generator(start, end):
while start < end:
yield start
start += 1
g = generator(0, 5)
print g
print next(g)
next(g)
for x in g:
print x
输出结果:
<generator object generator at 0x0000000002847A68>
0
2
3
4


3.使用内置函数 iter()

利用iter()方法将迭代对象转化为迭代器

iters = iter([1,2,3])
print iters
print next(iters)
print next(iters)
print next(iters)

输出结果:
<listiterator object at 0x00000000027FB4A8>
1
2
3
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: