for i in sub:...
for循环原理
1.调用对象sub的__iter__方法返回迭代器 即
ret = sub.__iter__()
2.循环调用ret的__next__()方法 i = ret.__next__() 直到
抛出StopIteration异常 被解释器捕捉后退出循环
这个异常不会暴露给用户
跟据此原理 下面创建一个可用for迭代的类
class yu:
def __init__(self,n):
self.n = n
def __iter__(self):
return self
def __next__(self):
self.n += 1
if self.n > 100:
raise StopIteration
return self.n
for i in yu(1):print(i)#输出1 2 3...100
############################################
for i in sub:print(i)
<==> 完全等价于下面代码片段
ret = sub.__iter__()
while True:
try:
i = ret.__next__()
except StopIteration:
break
print(i)
for循环原理
1.调用对象sub的__iter__方法返回迭代器 即
ret = sub.__iter__()
2.循环调用ret的__next__()方法 i = ret.__next__() 直到
抛出StopIteration异常 被解释器捕捉后退出循环
这个异常不会暴露给用户
跟据此原理 下面创建一个可用for迭代的类
class yu:
def __init__(self,n):
self.n = n
def __iter__(self):
return self
def __next__(self):
self.n += 1
if self.n > 100:
raise StopIteration
return self.n
for i in yu(1):print(i)#输出1 2 3...100
############################################
for i in sub:print(i)
<==> 完全等价于下面代码片段
ret = sub.__iter__()
while True:
try:
i = ret.__next__()
except StopIteration:
break
print(i)