首页 > 编程语言 >python 迭代器

python 迭代器

时间:2023-05-04 14:12:42浏览次数:40  
标签:__ 迭代 python self 元素 iter next

在 Python3 中,迭代器是一种可以逐个访问集合元素的对象,它实现了迭代协议(Iterator Protocol),即该对象必须具有 __iter__()__next__() 方法。

  • __iter__() 方法返回迭代器对象本身。
  • __next__() 方法返回下一个元素。

当没有更多的元素时,__next__() 方法应引发 StopIteration 异常。

注意事项:

  1. 迭代器只能单向移动,不能往回跳。
  2. 在 for 循环中,Python 会自动处理 StopIteration 异常,因此我们不需要显式地捕获和处理该异常。

下面是一个使用 Python3 迭代器的例子,该例子定义了一个 Fibonacci 数列的迭代器:

class Fib:
    def __init__(self, max):
        self.max = max

    def __iter__(self):
        self.a = 0
        self.b = 1
        return self

    def __next__(self):
        fib = self.a
        if fib > self.max:
            raise StopIteration
        self.a, self.b = self.b, self.a + self.b
        return fib

# 使用 Fibonacci 数列迭代器打印前 10 个数
fib = Fib(100)
for i in fib:
    print(i)

上面的例子中,我们定义了一个名为 Fib 的类,并实现了迭代器协议。在 __iter__() 方法中,我们初始化了两个变量 self.aself.b,并返回了迭代器对象本身。在 __next__() 方法中,我们计算了 Fibonacci 数列中的下一个元素,如果超过了指定的最大值,则引发 StopIteration 异常。

接着,我们使用 for 循环遍历 Fibonacci 数列的前 10 个元素,并打印每个元素的值。注意,在这个例子中,我们没有显式地捕获 StopIteration 异常,因为 Python 会自动处理该异常。

ython3 中的迭代器是一种实现了迭代协议(Iterator Protocol)的对象,它可以通过 __iter__()__next__() 方法来实现逐个访问集合元素的功能。迭代器的运行原理如下:

  1. 创建迭代器对象:使用一个可迭代对象创建迭代器对象,通常可以使用 iter() 函数来实现。

  2. 初始化迭代器对象:在迭代器对象中初始化相关参数,例如记录当前迭代位置、长度等信息。

  3. 返回迭代器对象本身:在 __iter__() 方法中返回迭代器对象本身。

  4. 访问下一个元素:在 __next__() 方法中计算出下一个元素,并返回该元素的值。

  5. 引发 StopIteration 异常:当没有更多的元素时,引发 StopIteration 异常。

下面是一个简单的例子,演示了 Python3 中迭代器的运行原理:

# 创建可迭代对象
my_list = [1, 2, 3]

# 获取迭代器对象
my_iter = iter(my_list)

# 访问下一个元素
print(next(my_iter))  # 输出 1

# 访问下一个元素
print(next(my_iter))  # 输出 2

# 访问下一个元素
print(next(my_iter))  # 输出 3

# 没有更多元素,引发 StopIteration 异常
print(next(my_iter))  # 抛出 StopIteration 异常

在上面的例子中,我们首先创建了一个可迭代对象 my_list,并使用 iter() 函数获取了该对象的迭代器对象 my_iter。接着,我们使用 next() 函数依次访问了 my_iter 中的三个元素,并打印了每个元素的值。最后,由于没有更多的元素可供访问,next() 函数抛出了 StopIteration 异常。

标签:__,迭代,python,self,元素,iter,next
From: https://www.cnblogs.com/yund/p/17371055.html

相关文章

  • Python爬虫需要哪些基础
    Python爬虫是指使用Python语言编写程序,自动化地访问Web页面并抓取其中的信息。以下是Python爬虫的基础知识:爬虫的工作原理:爬虫程序通过网络请求获取Web页面的HTML源码,然后使用正则表达式或解析器提取所需要的信息。常用的爬虫库:Python中常用的爬虫库包括requests、BeautifulSoup......
  • python 装饰器
    装饰器(Decorator)是Python语言中的一种高级技巧,可以在不改变原有代码的基础上,动态地给函数或类增加额外的功能。本质上,装饰器就是一个普通函数,它可以接受一个或多个参数,并且返回一个函数作为结果。装饰器的语法如下:@decorator_functiondeffunction_to_be_decorated():#F......
  • python 为什么在python脚本中import就可以引用别人的包
    目录python为什么在python脚本中import就可以引用别人的包编写一个包打包。发布到PyPIpython为什么在python脚本中import就可以引用别人的包Python中的import语句可以将已有的代码模块导入到当前的程序中,方便我们复用代码。如果你想让别人在其电脑上导入你写的包,有以下几......
  • python 内置函数map()、filter()函数
    map()函数接受两个参数:第一个参数是一个函数,第二个参数是一个可迭代对象(如列表、元组等)。该函数会将可迭代对象中的每个元素依次传递给第一个参数指定的函数,并返回一个新的可迭代对象,其中每个元素都是原始对象经过该函数转换后的结果。具体来说,map()函数会将可迭代对象中的每个......
  • python 函数
    在Python中,函数是一段代码块,用于完成特定的任务。函数通常接受一个或多个参数,并返回一个结果。根据函数的定义方式和参数类型,可以将Python函数分为以下几类:内置函数:Python内置了很多常用的函数,如 print()、len()、int() 等。自定义函数:使用 def 关键字可以自定义函数......
  • python 匿名函数(lambda函数)
    Python中的匿名函数是指没有命名标识符的函数,通常被称为lambda函数。与普通函数不同,它们是一种更加简洁的方式来编写小型临时函数。在Python中,匿名函数使用关键字lambda来定义,其语法如下:lambdaarguments:expression其中,arguments表示函数参数,可以是一个或多个,多个参数之间用......
  • python+playwright 学习-24 判断页面元素状态的几种方式
    前言在操作元素之前,可以先判断元素的状态。判断元素操作状态也可以用于断言。常用的元素判断方法page对象调用的判断方法,传一个selector定位参数page.is_checked(selector:str)#checkboxorradio是否选中page.is_disabled(selector:str)#元素是否可以点击或编辑page.i......
  • 【Python】orm 按日期分类
    1.Trunc#获取每个月count总数fromdjango.db.modelsimportSumfromdjango.db.models.functionsimportTruncmodels.NafpComplete.objects.filter().annotate(month=Trunc('point_time','month')).values('month').annotate(count=Sum('......
  • 【访问者设计模式详解】C/Java/JS/Go/Python/TS不同语言实现
    简介访问者模式(VisitorPattern)是一种行为型模式。它封装一个访问者类,把各元素类的操作集合起来,目的是将数据结构与数据操作分离。在不改变原有元素类数据结构的前提下,改变了元素类的执行算法。当某些较为稳定的东西(数据结构或算法),不想直接被改变但又想扩展功能,这时候适合用访问......
  • Python网络爬虫原理及实践 | 京东云技术团队
    作者:京东物流田禹1网络爬虫网络爬虫:是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。网络爬虫相关技术和框架繁多,针对场景的不同可以选择不同的网络爬虫技术。2Scrapy框架(Python)2.1.Scrapy架构2.1.1.系统架构2.1.2.执行流程总结爬虫开发过程,简化爬虫执行流程如下图......