Python教程:迭代器的正确使用方法

全面理解Python中的迭代器 迭代是一种重复获取数据集合中元素的过程,一次只获取一个元素,直到遍历完所有元素。在Python中,迭代通常用于遍历序列(如列表、元组)或任何可迭代对象。自定义迭代器允许我们创建自己的数据结构并以迭代方式访问其内容。在Python中,最常见的方式是通过生成器函数来实现。生成器函数是一种特殊的迭代器,使用yield语句暂停和恢复函数的执行。# 使用自定义迭代器print(num)itertools模块包含了许多有用的迭代器函数,如count()cycle()chain()等。例如,count()break。 阅读详情

迭代器是可以迭代的对象。 在本教程中,您将了解迭代器的工作原理,以及如何使用__iter__和__next__方法构建自己的迭代器。

迭代器在Python中无处不在。 它们优雅地实现在循环,推导,生成器等中,但隐藏在明显的视觉中。

Python中的迭代器只是一个可以迭代的对象。一个将一次返回数据的对象或一个元素。

从技术上讲,Python迭代器对象必须实现两个特殊的方法__iter__()和__next__(),统称为迭代器协议。

如果我们从中获取一个迭代器,那么一个对象被称为iterable。 大多数Python中的内置容器是列表,元组,字符串等都是可迭代的。

iter()函数(这又调用__iter__()方法)返回一个迭代器。

通过Python中的迭代器迭代

使用next()函数来手动遍历迭代器的所有项目。当到达结束,没有更多的数据要返回时,它将会引发StopIteration。 以下是一个例子。

# define a list
my_list = [4, 7, 0, 3]
  
# get an iterator using iter()
my_iter = iter(my_list)
  
## iterate through it using next()
  
#prints 4
print(next(my_iter))
  
#prints 7
print(next(my_iter))
  
## next(obj) is same as obj.__next__()
  
#prints 0
print(my_iter.__next__())
  
#prints 3
print(my_iter.__next__())
  
## This will raise error, no items left
next(my_iter)

更优雅的自动迭代方式是使用for循环。 使用for循环可以迭代任何可以返回迭代器的对象,例如列表,字符串,文件等。

>>> for element in my_list:
...     print(element)
...    
  
  
3

循环如何实际工作?

在上面的例子中看到的,for循环能够自动通过列表迭代。

事实上,for循环可以迭代任何可迭代对象。我们来仔细看一下在Python中是如何实现for循环的。

for element in iterable:
    # do something with element

实际上它是以类似下面的方式来实现的 -

# create an iterator object from that iterable
iter_obj = iter(iterable)
  
# infinite loop
while True:
    try:
        # get the next item
        element = next(iter_obj)
        # do something with element
    except StopIteration:
        # if StopIteration is raised, break from loop
        break

所以在for的内部,for循环通过在可迭代的对象上调用iter()来创建一个迭代器对象iter_obj。

有意思的是,这个for循环实际上是一个无限循环。

在循环中,它调用next()来获取下一个元素,并使用该值执行for循环的主体。 在所有对象耗尽后,引发StopIteration异常,内部被捕获从而结束循环。请注意,任何其他类型的异常都将正常通过。

在Python中构建自己的Iterator

构建迭代器在Python中很容易。只需要实现__iter__()和__next__()方法。

__iter__()方法返回迭代器对象本身。如果需要,可以执行一些初始化。

__next__()方法必须返回序列中的下一个项目(数据对象)。 在到达结束后,并在随后的调用中它必须引发StopIteration异常。

在这里,我们展示一个例子,在每次迭代中给出下一个2的几次方。 次幂指数从零开始到用户设定的数字。

class PowTwo:
    """Class to implement an iterator
    of powers of two"""
  
    def __init__(self, max = 0):
        self.max = max
  
    def __iter__(self):
        self.n = 0
        return self
  
    def __next__(self):
        if self.n <= self.max:
            result = 2 ** self.n
            self.n += 1
            return result
        else:
            raise StopIteration

现在可以创建一个迭代器,并通过它迭代如下

>>> a = PowTwo(4)
>>> i = iter(a)
>>> next(i)
  
>>> next(i)
  
>>> next(i)
  
>>> next(i)
  
>>> next(i)
  
>>> next(i)
Traceback (most recent call last):
...
StopIteration

也可以使用for循环迭代那些迭代器类。

>>> for i in PowTwo(5):
...     print(i)
...    
  
  
8

Python无限迭代器

迭代器对象中的项目不必都是可耗尽的,可以是无限迭代器(永远不会结束)。 处理这样的迭代器时一定要小心。

下面是用来演示无限迭代器的一个简单的例子。

内置的函数iter()可以用两个参数来调用,其中第一个参数必须是可调用对象(函数),而第二个参数是标头。迭代器调用此函数,直到返回的值等于指定值。

>>> int()
  
  
>>> inf = iter(int,1)
>>> next(inf)
  
>>> next(inf)

可以看到,int()函数总是返回0,所以将它作为iter(int,1)传递将返回一个调用int()的迭代器,直到返回值等于1。这从来没有发生,所以这样就得到一个无限迭代器。

我们也可以建立自己的无限迭代器。 以下迭代器理论上将返回所有奇数。

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class InfIter:
    """Infinite iterator to return all
        odd numbers"""
  
    def __iter__(self):
        self.num = 1
        return self
  
    def __next__(self):
        num = self.num
        self.num += 2
        return num

示例运行如下

>>> a = iter(InfIter())
>>> next(a)
  
>>> next(a)
  
>>> next(a)
  
>>> next(a)

当迭代这些类型的无限迭代器时,请注意指定终止条件。

使用迭代器的优点是它们可以节省资源。 如上所示,我们可以获得所有奇数,而不将整个系统存储在内存中。理论上,可以在有限的内存中计算有无限的项目。

Python 中的迭代器 迭代器可以迭代的对象称为可迭代对象。理论上,这两个对象是不同的,但可以在可迭代对象类中实现迭代器。所有这些数据类型都是可迭代的,因此我们可以使用简单的。这种实现迭代器的风格在互联网上很常见,但它不是推荐的方法,并且被认为是一种糟糕的设计。接下来,我们将学习使对象具有可迭代性的因素,这也被称为。使用可迭代对象作为迭代器的这种方法也不被认为是线程安全的。这两个迭代器都单独保存了自己的状态,输出结果符合我们的预期。创建迭代器的方法是用一个单独的类定义迭代器,并实现。方法,我们就称其是可迭代的。 阅读详情

相关推荐

【Python高级语法】——迭代器 (Iterator)

迭代器是访问集合的一种方式,可以记住遍历位置的对象,迭代器从集合的第一个元素开始访问,直到所有的元素被访问完才结束,只能往往前,不能后退。

Python全栈系列 2万+

python 多装饰器在类上_Python迭代器(三十五)

迭代器是可以迭代的对象。 在本教程中,您将了解迭代器的工作原理,以及如何使用__iter__和__next__方法构建自己的迭代器。迭代器在Python中无处不在。 它们优雅地实现在循环,推导,生成器等中,但隐藏在明显的视觉中。Python中的迭代器只是一个可以迭代的对象。一个将一次返回数据的对象或一个元素。从技术上讲,Python迭代器对象必须实现两个特殊的方法__iter__()和__next...

weixin_39761822的博客 284

《Python基础教程》第9章笔记:魔法方法、特性和迭代器

本章讨论几个重要的魔法方法,其中最重要的是__init__以及一些处理元素访问的方法(它们让你能够创建序列或映射)。本章还将讨论两个相关的主题:特性(property)和迭代器(iterator)。前者通过函数property处理,而后者使用魔法方法__iter__,这让其可用于for循环中。

WalkingComputer的博客 1611

Python编程---迭代(iterate)

迭代(iterate)

Andy的博客 3656

【Qt】QML-01:使用QtCreator10创建QML工程,并讲解第一个程序:Hello World

QML第一讲:创建QML工程、详解QML第一个程序Hello World

郭老二 7795

保姆级教程:用ncnn把自训练的YOLOv8模型塞进Android App(附完整代码)

本文提供了一份详细的保姆级教程,指导开发者如何将自训练的YOLOv8模型通过ncnn框架部署到Android应用中。教程涵盖环境配置、模型训练与转换、Android工程集成及性能优化等全流程,并附完整代码实现,帮助开发者快速掌握移动端AI模型部署技术。

weixin_42659194的博客 255

python:迭代器详解及使用方法

目录 一、什么是迭代器 二、创建迭代器 三、迭代器方法 四、迭代器的应用:通过迭代器读取视频帧 一、什么是迭代器 迭代,字面理解就是多次重复做一件事情,类似于循环。迭代器是实现了__next__()方法的对象,并且这个方法在调用时不需要任何参数,它是访问可迭代序列的一种方式,通常从序列的第一个元素开始访问,直到所有的元素被访问才结束。 迭代器只能前进不能后退。 使用迭代器不需要事先准备好整个迭代过程中的所有元素。迭代器仅仅在迭代到某个元素时才计算该元素,儿在这之前或之后可以不存在或者被.

xddwz的博客 1727

kaggle——销量预测的baseline(M5 Forecasting - Accuracy)

前言 在刚刚结束的kaggle比赛M5 Forecasting - Accuracy中,因为是第一次参加,笔者也是花了大量的时间和精力在上面,最终拿到一块银牌(所以我拿到了大学第一个考试挂科。。。求求电磁场老师高抬贵手给点平时分放我一马吧。。。早上看到kaggle成绩异常兴奋,中午考完直接爆炸=。=),当然运气占了很大因素,这次比赛private leadboard的shake up非常大,排名波动几千名都存在的。笔者运气不错,是向上的shake:)。这里总结一下销量预测的基本流程。 从下图可以看到这次比

weixin_43901221的博客 5431

【Python迭代器探秘】:揭秘迭代器与生成器的魔法,掌握高效循环的艺术

定义了一个 my_generator() 函数,它使用 while True 循环不断返回 yield 所产生的值,并在 yield 语句中使用变量 val 来接收 send() 方法所发送的值。与 next() 方法不同,send() 方法可以在生成器中接收一个值,并且该值会成为生成器中 yield 的表达式的结果。Python内置了很多支持迭代器模式的对象,同时也提供了一些常用的内置迭代器函数,包括map()、filter()、zip()和reversed()等。() 方法,即可满足迭代协议。

书山有路勤为径,学海无涯苦作舟。 3809

固定资产报废的损失鉴定怎么做?

在社会生产的日常中,企业经常会遇到固定资产报废的损失鉴定,那么怎么去做鉴定?哪些情况下能申请固定资产报废损失鉴定呢? 今天,华碧鉴定就和大家说一说固定资产报废损失鉴定那些事儿。 符合下列条件之一的固定资产可申请报废: 1、使用年限过长,功能丧失,完全失去使用价值,或不能使用并无修复价值的; 2、产品技术落后,质量差,耗能高,效率低,已属淘汰且不适于继续使用,或技术指标已达不到使用要求的; 3、严重损坏,无法修复的或虽能修复,但累计修理费已接近或超过市场价值的; 4、主要附件损坏,无.

weixin_50362670的博客 2115

基于STM32、HAL库的ICP-20100气压传感器 驱动程序设计

它具有低功耗、高精度、快速响应等特点,非常适合物联网、可穿戴设备和无人机等应用。#define ICP20100_FIFO_CTRL 0x09 // FIFO控制寄存器。#define ICP20100_FIFO_DATA 0x0A // FIFO数据寄存器。#define ICP20100_FIFO_STS 0x0B // FIFO状态寄存器。#define ICP20100_FIFO_WTM 0x15 // FIFO水印设置。

corlin6688的博客 599

什么是python的迭代器,迭代器有什么好处

【前言】 在初级研发或测试面试中总会被问到什么是python的迭代器,有什么好处?这个看似很简单的话题说起来似乎感觉自己并不是特别清楚的能讲出来。所以本文记录下自己查阅很多资料后的总结。 【什么是迭代器】 迭代器是python最强大的功能之一,是访问集合元素的一种方式 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个stoplteration异常,以终止迭代(只能往后走,不能往前退) 2.可迭代对象:实现了迭代器协议的对象(如何实现:对象内部定义一

Be_Nice的博客 9514

【深度学习|多实例学习】多实例学习(Multiple Instance Learning, MIL)的起源、发展和应用,附代码(一)

【深度学习|多实例学习】多实例学习(Multiple Instance Learning, MIL)的起源、发展和应用,附代码(一)

2401_89898861的博客 1918

Python关于迭代器的使用

迭代是一种重复获取数据集合中元素的过程,一次只获取一个元素,直到遍历完所有元素。在Python中,迭代通常用于遍历序列(如列表、元组)或任何可迭代对象。1.2 Python中的迭代机制Python的迭代机制依赖于两个特殊方法:__iter__和__next__。__iter__方法返回一个迭代器对象,而__next__方法则负责返回迭代器的下一个值。当没有更多的值可返回时,__next__会抛出StopIteration异常。这使得Python中的所有可迭代对象都可以被自然地用于for循环。

互联网架构小马的博客 1572

Python 爬虫实战:爬取万方数据文献信息

本文介绍了基于Python爬虫技术合规获取万方数据文献信息的方法。通过分析万方数据的请求机制与反爬策略,采用requests库结合Session维持合法会话,实现了文献标题、摘要、作者等核心元数据的提取。文章详细讲解了Token验证、动态请求构造、JSON数据解析等关键技术,并提供了完整可运行代码。同时强调严格遵守《万方数据知识服务平台用户协议》,控制请求频率,仅限学术研究使用。该方案为万方数据文献信息获取提供了标准化解决方案,支持数据清洗、结构化存储及后续分析应用。

2503_91057718的博客 2134

IDCNBSAIS-财务报表功能范围取值管理费用、销售费用、研发费用排除指定科目的实现

研究了很多方法,没有办法实现,只在营业费用增加一个冲抵项解决,也咨询了外部顾问说要建立自建表。限于需要马上修正后面只能用了最最low的办法处理了一下。公司遇到的一个问题,目前报表有些项目是按照功能范围取值的,发现取多了。IDCNBSAIS-财务报表功能范围取值管理费用、销售费用、研发费用排除指定科目的实现。最后结果是正确的,但是总觉得有更好的办法,不知道有没有高人可以指点一下?建立一个调整项的目录,在每个节点做了调整。除了研发费用做了冲抵在以下每个节点都做了冲抵。为财务报表定义表格结构。

nopicture的博客 1491

Python 中的迭代器:原理与使用

python迭代器

威桑的博客 2510

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Python迭代器的创建和使用:iter()和next()方法,迭代器长度的获取

一、迭代器的特性 1、迭代器是一个可以记住遍历位置的对象。 2、迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不能后退。 3、迭代器是Python中的容器类的数据类型,可以同时存储多个数据,取迭代器中的数据只能一个一个地取,而且取出来的数据在迭代器中就不存在了。 因此在训练数据时,dateloader加载迭代器应该放在epoch循环内,否则在第一个epoch内迭代器数据会被取完,下一个epoch将没有数据可用。 如以下程序中,get_dataset_loader必须放在 f

qq_43799400的博客 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

python迭代器使用_Python学习笔记之Python迭代器正确使用方法详解

一、迭代器相关迭代器(iterator)有时又称游标(cursor)是程序设计的软件设计模式,可在容器(container,例如链表或阵列)上遍访的接口,设计人员无需关心容器的内容。关键点:遍访(遍历?)容器 写到这里给大家推荐一个资源很全的python学习免非解答.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,这里有资深程序员分享以前学习心得,学习笔记,还有一线企业的工作经验,且给...

weixin_39622643的博客 157

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Python 迭代器的使用

Python 迭代器的使用

Jairo的博客 5017

Python迭代器和生成器:迭代器协议①

迭代器是一个可以遍历某个容器(如列表、元组、字典等)中的所有元素的对象。__iter__(): 该方法返回迭代器对象本身。__next__(): 该方法返回容器的下一个元素。如果没有更多元素,则抛出异常。这种协议被称为迭代器协议。创建自定义迭代器非常简单,只需实现__iter__()和__next__()方法即可。通过本文,我们详细介绍了Python中的迭代器协议,包括__iter__()和__next__()方法。

结合项目案例,记录点点滴滴,自己回顾,分享他人o__o 2840

Python方法、属性和迭代器

1.方法调用:实例化方法只能通过实例来访问,静态方法只能通过类访问,类方法既可以通过类的实例访问,也可以通过类来访问2.变量访问:通过实例定义的变量只能被实例方法访问,而直接在类中定义的静态变量既可以被实例方法访问,也可以被静态方法和类方法访问。3.实例方法不能被静态方法和类方法访问,但静态方法和类方法可以被实例方法访问。

Wzy2082258001的博客 1652

python中迭代器的基本方法_Python 迭代器

Python 迭代器迭代器是可以迭代的对象。 在本教程中,您将学习迭代器的工作原理以及如何使用__iter__和__next__方法构建自己的迭代器。Python中的迭代器是什么?迭代器在Python中无处不在。它们在for循环,理解,生成器等中优雅地实现,但却隐藏在眼皮底下。Python中的Iterator只是一个可以迭代的对象。一个将返回数据的对象,一次返回一个元素。从技术上讲,Python ...

weixin_34543731的博客 764

Python3迭代器的使用方法整理

迭代器是可以迭代的对象。 在本教程中,您将了解迭代器的工作原理,以及如何使用__iter__和__next__方法构建自己的迭代器。 迭代器在Python中无处不在。 它们优雅地实现在循环,推导,生成器等中,但隐藏在明显的视觉中。 Python中的迭代器只是一个可以迭代的对象。一个将一次返回数据的对象或一个元素。 从技术上讲,Python迭代器对象必须实现两个特殊的方法__iter__()和__next__(),统称为迭代器协议。 如果我们从中获取一个迭代器,那么一个对象被称为iterable。 大

沐雪架构师 593

Python 迭代器与生成器详细教程

迭代器是一种对象,它能“记住”遍历的状态,并且提供了一种逐个访问集合中元素的方式。你可以通过迭代器遍历任何支持迭代协议(即__iter__()和__next__()方法的对象)。生成器是迭代器的一种简化实现方式,通常是通过一个包含yield关键字的函数来创建。生成器具有与普通函数相同的特性,但其执行流程不再是一次性返回结果,而是每次遇到yield时返回一个值,并暂停函数执行,直到下次恢复。迭代器是支持迭代协议的对象,必须实现__iter__()和__next__()方法。生成器。

qq_42114233的博客 712
上一篇: python教程:15种字符串操作方法
下一篇: Python教程:with ... as 语句你懂嘛?
Python热爱者
博客等级 码龄7年 3049粉丝 1330原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值