python迭代器

2020-05-02  本文已影响0人  DayBreakL

根据自定义一个可迭代器,学习迭代器协议,最简单的迭代器逻辑

# 迭代器自带__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)

输出如图:


上一篇 下一篇

猜你喜欢

热点阅读