python迭代器(1)

选用一个可迭代的列表对象实验:

1
2
3
4
5
6
7
8
9
10
11
12
13
>>> i=[1,2,3,4]
>>> for t in i:
print t

1
2
3
4

>>> i.__iter__
<method-wrapper '__iter__' of list object at 0x04040378>
>>> i.__iter__()
<listiterator object at 0x040561F0>

从上面的代码可知:

可迭代对象实现了__iter__方法或一个实现了__iter__方法的对象是可迭代的(iterable);

可迭代对象调用__iter__方法会返回一个迭代器(iterator)

接下来继续实验:

​ 书中说到,所谓的迭代器就是具有next()方法的对象,调用next()方法会返回该对象的下一个值,如果该方法被调用,但是迭代器没有值可以返回,就会引发一个StopIteration异常.

1
2
3
4
5
6
7
8
>>> i.__iter__().next()
1
>>> i.__iter__().next()
1
>>> i.__iter__().next()
1
>>> i.__iter__().next()
1

并没有按照我的想法打印出1,2,3,4.

尝试下面的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ite=i.__iter__()
>>> ite
<listiterator object at 0x040564F0>
>>>ite.next()
1
>>> ite.next()
2
>>> ite.next()
3
>>> ite.next()
4
>>> ite.next()

Traceback (most recent call last):
File "<pyshell#23>", line 1, in <module>
ite.next()
StopIteration

原因还没想到啊…