详解Python中for循环的工作原理

如果你对python中的for循环不是很清楚,那么建议你看看这篇文章,本文主要给大家介绍了关于python中for循环是如何工作的相关资料,介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。

前言

for…in 是Python程序员使用最多的语句,for 循环用于迭代容器对象中的元素,这些对象可以是列表、元组、字典、集合、文件,甚至可以是自定义类或者函数,例如:

作用于列表

>>> for elem in [1,2,3]:...  print(elem)...123

登录后复制

作用于元组

立即学习“Python免费学习笔记(深入)”;

>>> for i in ("zhang", "san", 30):...  print(i)...zhangsan30

登录后复制

作用于字符串

>>> for c in "abc":...  print(c)...abc

登录后复制

作用于集合

>>> for i in {"a","b","c"}:...  print(i)...bac

登录后复制

作用于字典

>>> for k in {"age":10, "name":"wang"}:...  print(k)...agename

登录后复制

作用于文件

>>> for line in open("requirement.txt"):...  print(line, end="")...Fabric==1.12.0Markdown==2.6.7

登录后复制

可能有人不经要问,为什么这么多不同类型对象都支持 for 语句,还有哪些类型的对象可以作用在 for 语句中呢?回答这个问题之前,我们先要了解 for 循环背后的执行原理。

for 循环是对容器进行迭代的过程,什么是迭代?迭代就是从某个容器对象中逐个地读取元素,直到容器中没有更多元素为止。那么,哪些对象支持迭代操作?任何对象都可以吗?先随便自定义一个类试试,看行不行:

>>> class MyRange:...  def init(self, num):...   self.num = num...>>> for i in MyRange(10):...  print(i)...Traceback (most recent call last): File "", line 1, in TypeError: 'MyRange' object is not iterable

登录后复制

错误堆栈日志非常清楚地告诉我们,MyRange 不是一个可迭代对象,所以它不能用于迭代,那么到底什么样的对象才称得上是可迭代对象(iterable)呢?

可迭代对象需要实现iter方法,并返回一个迭代器,什么是迭代器呢?迭代器只需要实现 next方法。现在我们就来验证一下列表为什么支持迭代:

>>> x = [1,2,3]>>> its = x.iter() # x有此方法,说明列表是可迭代对象>>> its>>> its.next() # its有此方法,说明its是迭代器1>>> its.next()2>>> its.next()3>>> its.next()Traceback (most recent call last): File "", line 1, in StopIteration

登录后复制

从试验结果来看,列表是一个可迭代对象,因为它实现了 iter方法,并且返回了一个迭代器对象(list_iterator),因为它实现了 next方法。我们看到它不断地调用next方法,其实就是不断地迭代获取容器中的元素,直到容器中没有更多元素抛出 StopIteration 异常为止。

那么 for 语句又是如何循环的呢?到这里,恐怕你也猜到了,它的步骤是:

先判断对象是否为可迭代对象,不是的话直接报错,抛出TypeError异常,是的话,调用 iter方法,返回一个迭代器

不断地调用迭代器的next方法,每次按序返回迭代器中的一个值

迭代到最后,没有更多元素了,就抛出异常 StopIteration,这个异常 python 自己会处理,不会暴露给开发者

详解Python中for循环的工作原理

对于元组,字典,字符串也是同样的道理,弄明白了 for 的执行原理之后,我们就可以实现自己的迭代器用在 for 循环中。

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

class MyRange: def init(self, num):  self.i = 0  self.num = num def iter(self):  return self def next(self):  if self.i 

因为它实现了next方法,所以 MyRange 本身已经是一个迭代器了,所以 iter返回的就是对象本身 self。现在用在 for 循环中试试:


for i in MyRange(3): print(i)# 输出 0 1 2

登录后复制

有没有发现,自定义的 MyRange 功能和内建函数 range很相似。for 循环本质是不断地调用迭代器的next方法,直到有 StopIteration 异常为止,所以任何可迭代对象都可以作用在for循环中。

以上就是详解Python中for循环的工作原理的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2268955.html

(0)
上一篇 2025年2月27日 10:58:31
下一篇 2025年2月21日 18:32:15

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 电脑编程语言入门自学书籍

    对于初学者选择合适的自学书籍,推荐的入门级书籍有:Head First Java(Java)Python Crash Course(Python)C++ Primer Plus(C++)The Rust Programming Langua…

    2025年2月27日
    200
  • python连接sqlite的实例教程

    本文通过实例代码给大家介绍了python 连接sqlite及简单操作,非常不错,具有参考借鉴价值,需要的朋友参考下吧 废话不多说了,直接给大家贴代码了,具体代码如下所示: import sqlite3#查询def load(table): …

    编程技术 2025年2月27日
    200
  • 编程软件电脑版有哪些

    选择编程软件时需考虑编程语言、所需功能和预算。免费软件: Visual Studio Code、Sublime Text、Atom、Brackets付费软件: IntelliJ IDEA、PyCharm、Visual Studio、Ecli…

    2025年2月27日
    200
  • 教你一招用Python破解斗地主残局

    斗地主应该对大家来说都不陌生,下面这篇文章主要跟大家分享了关于利用python破解斗地主残局的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。 前言 相信大家都玩过斗地主,规则就不再介绍了。 直接上…

    2025年2月27日
    200
  • 电脑编程需要什么软件

    计算机编程需要的软件包括:文本编辑器/IDE:创建、编辑、存储源代码编译器/解释器:将源代码转换为可执行指令调试器:检测、纠正错误版本控制系统:管理代码版本、协作开发打包工具:打包可执行程序、库、依赖项语言特定工具:根据编程语言而异 编写计…

    2025年2月27日
    200
  • Python实现文本编辑器功能实例详解

    这篇文章主要介绍了python实现的文本编辑器功能,结合实例形式详细分析了基于wxpython实现文本编辑器所需的功能及相关实现技巧,需要的朋友可以参考下 本文实例讲述了Python实现的文本编辑器功能。分享给大家供大家参考,具体如下: w…

    2025年2月27日
    200
  • 电脑程序用什么语言开发

    电脑程序是用编程语言编写的指令集,将人类可读的命令转换为机器代码。常见的编程语言包括:Python:通用,适用于 Web 开发和数据分析。Java:面向对象,适用于企业应用程序和 Android 应用程序。C++:编译型,适用于高性能应用程…

    2025年2月27日
    200
  • Python构建XML树结构的实例教程

    这篇文章主要介绍了python构建xml树结构的方法,结合实例形式分析了python创建与打印xml数结构的实现步骤与相关操作技巧,需要的朋友可以参考下 本文实例讲述了Python构建XML树结构的方法。分享给大家供大家参考,具体如下: 1…

    编程技术 2025年2月27日
    200
  • 编程语言在电脑上怎么学

    在电脑上学习编程语言的方法有在线课程平台(Codecademy、Udemy、Coursera)、视频教程(YouTube、Pluralsight、LinkedIn Learning)、书籍(《Head First Java》、《Eloque…

    2025年2月27日
    200
  • 分享利用python的Tkinter编写登陆注册实例

    这篇文章主要为大家详细介绍了基于python的tkinter编写登陆注册界面,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 tkinter创建登陆注册界面,供大家参考,具体内容如下 import tkinter as tkfrom tk…

    编程技术 2025年2月27日
    200

发表回复

登录后才能评论