迭代器使用For循环
第一步:For会调用iter( )方法,返回迭代器自身 第二步:For会不断调用next( )函数,next( )函数会调用next( )方法,并每次返回迭代器中的下一个值。 第三步:迭代器到最后没有元素了,会抛出”StopIteration”异常后退出For循环
class It_name:def __init__(self, x):print("__init__():",x)self.x = xdef __next__(self):print("__next__():",end="")self.x = self.x + 1if self.x >= 7:print("StopIteration")raise StopIterationelse:return self.xdef __iter__(self):print("__iter__()")return selfIT = It_name(2) #创建迭代器对象print("Work in for-Loop:")for i in IT:print(i)#=====================================#ouput__init__():2Work in for-Loop:__iter__()__next__():3__next__():4__next__():5__next__():6__next__():StopIteration
可迭代对象使用For循环
第一步:判断是否为可迭代对象(即判断是否有iter或getitem方法) 没有的话直接报错(抛出TypeError错误) 第二步:如果有iter方法,调用iter方法并转换成迭代器(iterator) 如果有getitem方法,不存在iter的时候,返回一个下标迭代的iterator对象来代替 (或者用旧的迭代协议,即采用下标迭代, (迭代完成后抛出的IndexError异常,而非”StopIteration”异常 第三步:整个For语句目前已经转换成迭代器了,接下来就和前面的“迭代器使用For循环”一样了
from collections import Iterable #可迭代对象from collections import Iterator #迭代器对象L = ["A", "B", "C"]L1 = isinstance(L, Iterable)L2 = isinstance(L, Iterator)F1 = isinstance((i for i in L), Iterable)F2 = isinstance((i for i in L), Iterator)print("list is Iterable:",L1)print("list is Iterator:",L2)print("FOR LIST is Iterable:",F1)print("FOR LIST is Iterator:",F2)#=================================#OUTPUTlist is Iterable: Truelist is Iterator: FalseFOR LIST is Iterable: TrueFOR LIST is Iterator: True
L = ["A", "B", "C"]for i in L:print(i)#================================#OUTPUTABC

