千家信息网

for循环是如何在Python中的工作

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇内容主要讲解"for循环是如何在Python中的工作",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"for循环是如何在Python中的工作"吧!例如:作
千家信息网最后更新 2026年11月01日for循环是如何在Python中的工作

本篇内容主要讲解"for循环是如何在Python中的工作",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"for循环是如何在Python中的工作"吧!

例如:

作用于列表

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

作用于字符串

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

作用于字典

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

可能有人不经要问,为什么这么多不同类型对象都支持 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 自己会处理,不会暴露给开发者

对于元组,字典,字符串也是同样的道理,弄明白了 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 < self.num:            i = self.i            self.i += 1            return i        else:            # 达到某个条件时必须抛出此异常,否则会无止境地迭代下去            raise StopIteration()

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

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

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

到此,相信大家对"for循环是如何在Python中的工作"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

迭代 对象 方法 循环 作用 元素 容器 不断 更多 工作 语句 支持 内容 原理 字典 字符 字符串 就是 此方法 类型 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技股 南京欣网互联网络科技有限公司 上海睿民互联网科技有限公司 中关村互联网 科技集团 互联网属科技 远信互联网科技 北京禾田雨橡互联网科技 奔汉互联网科技 融贸通互联网科技 互联网 科技服务平台 互联网科技创新企业排名 湖南洣水互联网科技有限公司扣款 重庆互联网医院沙龙医盟信息科技 湖南一路畅行互联网科技 四川慕妮娅互联网科技有限公司 用友工业互联网科技发展 明优互联网科技有限公司 易企秀互联网科技是做什么的 互联网科技和医药行业 广东猫王互联网科技有限公司电话 互联网扶贫科技 互联网金融与金融科技 天下捷融互联网科技 浙南科技城互联网大厦建设工程 华夏恒生互联网科技013171 区块链结合互联网科技 互联网科技包装股份有限公司上市 福州德业互联网科技 北京军民互联网科技公司 河南商务圈互联网科技有限公司
0