选用一个可迭代的列表对象实验:
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
|
原因还没想到啊…