¥for循环内置机制¥

for循环内部机制

  • Python中,使用for循环可以迭代容器对象中的元素

  • 这里容器对象包括是列表(list)、元组(tuple)、字典(dict)、集合(set)等。

【一】迭代器

  • 在可迭代的对象中,需要实现一个__iter__方法

    • 而且这个方法的返回值需要是一个迭代器。

  • 迭代器只需要实现__next__方法。

{分析}

  • 实现了__iter__方法,而且返回一个迭代器(iterator)

  • 迭代器中实现了__next__方法。

  • 在不断调用__next__的过程中,就是在不断返回元素,直到出现StopIteration的错误

【二】for循环内部机制

  • 其实,for语句的作用与此类似。

  • for语句的内部机制为:

    • 先判断对象是否为可迭代对象,即是否存在__iter__方法

      • 如果存在则调用__iter__方法,返回一个迭代器;

      • 否则,直接抛出TypeError异常;

    • 不断地调用迭代器的__next__方法,每次调用按顺序迭代获取当前的值;

    • 迭代完所有元素,就抛出异常 StopIteration,

      • 这个异常 python 解释器自己会处理;

  • 前面的 TestRange 报错是因为它没有实现迭代器协议里面的这两个方法,现在继续改进:

class TestRange:
    def __init__(self, _max):
        self.i = 0
        self._max = _max
​
    def __iter__(self):
        return self
​
    def __next__(self):
        if self.i < self._max:
            i = self.i
            self.i += 1
            return i
        else:
            # 达到停止条件时,抛出此异常
            raise StopIteration()
​
​
# 进行测试
for i in TestRange(3):
    print(i)
# 输出
#  0
#  1
#  2
  • 分析:

    • 因为这个类中,已经实现了__next__方法,所以基于这个类所创建的对象,本身就是一个迭代器。

    • 又因为可迭代对象需要有__iter__方法,而且返回一个迭代器,所以__iter__返回对象本身self即可。

【三】总结

  • for循环内部其实也报错了,只不过错误没让我们看见,内部处理了

  • for循环内部执行流程:

    • 把关键字in后面的数据类型转为了迭代器 iter

    • 循环next取值

    • next取值完毕之后也报错了,自动处理错误并且结束while循环

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值