python中for循环的运行机制

官方文档解释 【for循环语句】,明确说明“starred_list 表达式会被求值一次;它应当产生一个 iterable 对象。 将针对该可迭代对象创建一个 iterator。”其中starred_list是指for语句后边括号内的表达式,他需要产生一个iterable对象,然后再用这个iterable对象创建一个iterator。
何为iterable对象, 强烈建议阅读最权威的【官方文档】,大致如下:

  • 任何定义了__iter__() 方法或实现了 sequence 语义的__getitem__() 方法的自定义类的对象。

再次强调尽量阅读官方资料,因为目前网上相关的教程大部分定义iterable对象的时候总是说实现了__iter__() 的对象,漏掉了__getitem__() ,这显然错误的,然后以诶传诶误人子弟。

言归正传,有了iterable对象for循环语句接下来会调用类方法__iter__()或者内置方法iter()创建一个iterator(迭代器),接着就可以调用这个iterator.next()去获取元素,当iterator所有元素都被迭代完会抛出StopIteration错误,for语句捕获到了这个错误就会结束循环。

总结下for循环的工作流程:

  1. 运行for i in starred_list中的starred_list语句一次
  2. starred_list语句的结果如果是一个iterable对象继续下一步,否则抛出TypeError异常
  3. 调用类方法__iter__()或者内置方法iter()用这个iterable对象创建一个iterator(迭代器)
  4. 调用iterator里的__next__()获得元素并且执行循环体代码段
  5. 捕获到StopIteration(迭代器结束异常)结束整个for循环
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值