可迭代对象指的是,对象具有__iter__,或者__getiter__方法(dir(object));
迭代器指的是,对象具有__next__方法;
迭代,指的是一个过程,比如for循环;
问题:字符串是可迭代对象,但不是迭代器,却可以通过for循环遍历?
解答:字符串string具有__iter__方法,而没有__next__方法,所以,next("hello world"),会报错;
但是,for循环又是一个不断next(),直到"超出"异常被处理时停止的过程,为什么字符串可以遍历呢?
因为__iter__方法被执行之后,会返回一个迭代器,如此就可以通过for循环遍历字符串了;
其他:python提供一个iter()内置函数来执行对象的__iter__方法:
>>> str_test = "abc" >>> next(str_test) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'str' object is not an iterator >>> next(iter(str_test)) 'a'