根据自定义一个可迭代器,学习迭代器协议,最简单的迭代器逻辑
# 迭代器自带__iter__()方法,返回一个迭代器
# 迭代器协议:
# 1. 实现了迭代器对象,即对象内部定义一个__iter__()方法
# 2. 对象实现__next()__方法
class StrDemo():
def __init__(self,s):
self.__s=s # 传入一个字符串
self.__len=len(s) # 记录字符串的长度
self.__step=0 # 记录访问的下标
def __iter__(self):
print("调用了__iter__()")
return self # 返回可迭代对象,自己
def __next__(self):
print("调用了__next__()")
if self.__step>=self.__len:
raise StopIteration("下标越界")
else:
c = self.__s[self.__step]
self.__step += 1
return c
# __next__()在什么时候会触发:1.主动调用时,如:print(s.__next__()) 2.调用内置方法next(s)时,会去触发__next__()
# __iter__()在什么时候会触发:1. iter(s),调用__iter__() 2.遍历可迭代对象时,先调用__iter__()把可迭代对象转为迭代器,如for循环时
s=StrDemo("123333")
for i in s:
print(i)
输出如图:
网友评论