1, iterator 是一个实现了以下方法的对象:
1)next方法: 返回容器的下一个元素(在此方法中需要抛出StopIteration异常以标识遍历结束)
2)__iter__方法: 将迭代器设置为初始状态,返回迭代器自身
当一个对象具备了以上两个方法则此对象可以在 "for x in obj" 语句中遍历
class Iter:
def __init__(self):
self.max = 3
self.value = 0
def __iter__(self):
print "this method will take the iterator to the initial status"
self.value = 0
return self
def next(self):
self.value = self.value +1
if self.value > self.max:
print "no elm in the iterator"
raise StopIteration
print "next() return %s" % self.value
return self.value
a = Iter()
for i in a:
print i
for i in a:
print i
outpu:
(env) D:\work\>python dec.py
this method will take the iterator to the initial status
next() return 1
1
next() return 2
2
next() return 3
3
no elm in the iterator
this method will take the iterator to the initial status
next() return 1
1
next() return 2
2
next() return 3
3
no elm in the iterator
2, yield 关键字
如果某个函数中使用了yield 关键字, 此函数将被解释器包装成一个迭代器生成器.即调用函数会返回一个迭代器.
迭代器的next()方法返回函数yield出的值.
在函数中执行到yield语句后, 函数的执行将会停止, 所有的局部变量会得以保存. 当进行下一次迭代时, 函数会从上一次停止处
(上次迭代的yield处)继续执行, 直到函数退出(包括StopIteration异常退出)
def IterGen():
for i in range(1,4):
print "i=%s" % i
yield i
iter = IterGen()
for a in iter:
print "a=%s" % a
(env) D:\work\>python dec.py
i=1
a=1
i=2
a=2
i=3
a=3