迭代器使用For循环
第一步:For会调用iter( )方法,返回迭代器自身 第二步:For会不断调用next( )函数,next( )函数会调用next( )方法,并每次返回迭代器中的下一个值。 第三步:迭代器到最后没有元素了,会抛出”StopIteration”异常后退出For循环
class It_name:
def __init__(self, x):
print("__init__():",x)
self.x = x
def __next__(self):
print("__next__():",end="")
self.x = self.x + 1
if self.x >= 7:
print("StopIteration")
raise StopIteration
else:
return self.x
def __iter__(self):
print("__iter__()")
return self
IT = It_name(2) #创建迭代器对象
print("Work in for-Loop:")
for i in IT:
print(i)
#=====================================
#ouput
__init__():2
Work 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)
#=================================
#OUTPUT
list is Iterable: True
list is Iterator: False
FOR LIST is Iterable: True
FOR LIST is Iterator: True
L = ["A", "B", "C"]
for i in L:
print(i)
#================================
#OUTPUT
A
B
C