for循环原理探究

要知道for循环原理,首先我们要知道什么是迭代器

# 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
# 
# 迭代器有两个基本的方法:iter() 和 next()。
#例如
list=[1,2,3,4]
 it = iter(list)    # 创建迭代器对象
print (next(it))   # 输出迭代器的下一个元素
#1
 print (next(it))
#2
# 字符串,列表或元组对象都可用于创建迭代器:
# 可迭代对象时具有__iter__(self,参数)方法的类创建的对象
# 迭代器对象时具有__iter__和__next__方法的类创建的对象
# 迭代器的作用时记录数据当前位以后获取下个位置的值,并返回
# iter函数:获取可迭代对象的迭代器, 会调用可迭代对象身上的__iter__方法
# __iter__ 返回一个特殊的迭代器对象, 这个迭代器对象实现了 __next__() 方法并通过 StopIteration 异常标识迭代的完成
# 
# StopIteration
# StopIteration 异常用于标识迭代的完成,防止出现无限循环的情况,在 __next__() 方法中我们可以设置在完成指定循环次数后触发 StopIteration 异常来结束迭代。。
# next函数:获取迭代器中下一个值,会调用迭代器对象身上的__next__方法
# for 循环的本质: 如果遍历的对象是可迭代对象那么会通过iter函数返回可迭代对象,再通过__next__函数返回下一个数据
class student_iter:
    def __init__(self,__stu):
        self.__stu=__stu
        self.__index=0
    def __next__(self):
        """
        用列表下标定位
        :return: 返回下一个数据
        """
        if self.__index<len(self.__stu):
            temp=self.__stu[self.__index]
            self.__index+=1
            return temp
        else:
            #越界,抛出异常
            raise StopIteration
class studentManger:
    def __init__(self):
        self.list_student=[]
    def add_student(self,name):
        self.list_student.append(name)
    def __iter__(self):
        """
        创建迭代器对象,传递需要迭代的数据
        :return:返回可迭代对象
        """
        return student_iter(self.list_student)
s1=studentManger()
s1.add_student("小明")
s1.add_student("小红")
s1.add_student("小蓝")
stu_iter=s1.__iter__()
while True:
    try:
        stu_info=stu_iter.__next__()#返回数据
        print(stu_info)
    except StopIteration:
        #如果异常就停止循环
        break

"""
输出结果:
小明
小红
小蓝
"""

for item in s1:
    #s1为可迭代对象
    print(item,end=" ")
#小明 小红 小蓝 
 
print()
a=iter(s1)#创建迭代器对象
print(next(a))#输出迭代器的下一个对象
print(next(a))#输出迭代器的下一个对象
print(next(a))#输出迭代器的下一个对象
"""
小明
小红
小蓝
"""
#for循环的原理是什么?
#        答:1. 获取迭代器
#           2. 循环获取下一个元素
#           3. 遇到异常停止迭代

#        可以被for的条件是什么?
#        答:能被for的对象必须具备__iter__方法
#        答:能被for的对象是可迭代对象
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

甲乙zzu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值