当前位置: 首页 > news >正文

深度讨论Python for循环

作者的其他文章推荐:强化学习再受关注!

for循环使用于遍历可迭代对象的Python语句,工作原理如下:

# for 循环
for item in iterable:
    print(item)

# 等价于
iterator = iter(iterable)  # 获取迭代器
while True:
    try:
        item = next(iterator)  # 获取下一个元素
        print(item)
    except StopIteration:
        break  # 迭代结束
  • 调用 iter() 函数,获取可迭代对象的迭代器。(注:iter()函数接收一个可迭代对象作为参数,返回一个迭代器,此迭代器正是这个可迭代对象的__iter_返回的迭代器)。

  • 调用迭代器的 __next__() 方法,获取下一个元素。

  • 将元素赋值给循环变量item,并执行循环体。

  • 重复步骤 2 和 3,直到迭代器抛出 StopIteration 异常,循环结束。

__getitem___

在第一节魔法函数中提到实现了__getitem__的对象可以使用索引取值,如x[0]。此外这种对象还可被用于for循环!

Python 的 for 循环在尝试迭代一个对象时,会按照以下顺序进行:

  • 如果对象实现了 __iter__ 方法,调用 __iter__ 方法获取迭代器。

  • 如果对象没有实现 __iter__ 方法,但实现了 __getitem__ 方法,Python 会尝试使用 __getitem__ 方法创建一个默认的迭代器(然后就和4.1中一样了),这个默认的迭代器(对__next_的实现)会从索引 0 开始,依次调用 __getitem__ 方法获取元素,直到抛出 IndexErrorStopIteration 异常。

    • 从索引 0 开始,调用 __getitem__(0)
    • 如果成功返回值,则继续调用 __getitem__(1)即for循环会自增索引
    • 依次类推,直到 __getitem__ 方法抛出 IndexError 异常(这个异常要不要显式地抛出要看代码逻辑了),表示没有更多元素可以访问
  • 如果对象既没有实现 __iter__ 方法,也没有实现 __getitem__ 方法,会抛出 TypeError 异常。

相关文章:

  • SQL Server安装过程中提示 .NET Framework 4.8 缺失
  • 【cocos creator 3.x】3Dui创建,模型遮挡ui效果
  • RocketMQ 底层原理
  • 什么是uv 和pip的区别是什么
  • 深入掌握Linux ip命令:网络配置与管理的瑞士军刀
  • Scala基础语法与简介
  • [OS_4] 数学视角 | 多状态 | 模型检查器 | 程序验证(math)
  • 掌握文件权限:理解Linux chmod
  • XS2105S/M——IEEE 802.3af/at 兼容、用电设备接口控制器集成功率 MOSFET,可替代TMI7302A/D和SD4923
  • MDC的原理是什么?
  • k8s存储介绍(一)configmap
  • Windows中安装git工具
  • /usr/bin/mysqldump: Permission denied问题分析
  • Redis原理:setnx
  • 基于Springboot的网上订餐系统 【源码】+【PPT】+【开题报告】+【论文】
  • 深入剖析C++中的哈希表:从STL到底层实现
  • 2000-2019年各省地方财政罚没收入数据
  • 测试环境项目启动redis报错
  • 智能任务分配:Python高并发架构设计
  • 调速电机怎么测量好坏
  • 马鞍山网站建设/百度关键词排名靠前
  • wordpress禁止留言网址/网站关键词优化办法
  • 网站建设企业排名推广/从哪里找网络推广公司
  • 西安短视频拍摄制作公司/网站整站优化公司
  • 网站建设数据库设计/兔子bt搜索
  • 南川区 网站集约化建设方案/外贸如何推广