首页 > 编程语言 >【python】基础之迭代器

【python】基础之迭代器

时间:2024-08-27 22:03:28浏览次数:7  
标签:__ .__ iterator 迭代 python self 基础 next

  • 1.总览

  • 2.迭代器介绍

    • 2.1:迭代器是一个实现了迭代协议的对象,它可以让我们遍历一个容器中的所有元素,而不需要知道容器的内部结构,迭代器可以用于遍历列表,元祖,字典,集合等容器类型;
    • 2.2:迭代器的工作原理是通过实现两个方法:iter()和__next__()方法,iter()方法返回迭代器对象本身,next()方法每次调用都会返回容器中的下一个元素,直到容器中的所有元素都被遍历完毕后,再调用__next__()方法就会抛出Stopiteration异常;
  • 3.for循环底层原理

# 可迭代对象 === 容器
list01 = [11,22,33,44]

# 迭代过程
# for item in list01:
#     print(item)

# 迭代原理
# 面试题:for循环的原理是什么?
#      可以被for的条件时什么?
#         答:必须具备__iter__方法
# 1.获取迭代器
iterator = list01.__iter__()
# 2.循环获取每一个元素
while True:
    try:
        item = iterator.__next__()
        print(item)
    # 3.遇到异常停止迭代
    except StopIteration:
        break
  • 3.1:可以直接用作for循环的数据类型有:1、集合数据类型,如list,tuple,dict,set,str等;2、generator,包含生成器和带yeild的generator方法。这些用作for循环的对象统称为可迭代对象:iterable;而可以被next()函数调用并且不断返回下一个值的对象称为迭代器:iterator。

  • 3.2:list,dict,str等虽然是iterable,却不是iterator
    注:为什么list,dict,str等数据类型不是iterator?因为python的iterator对象表示的是一个数据流,iterator对象可以被next函数调用并且不断返回下一个数据,直到没有数据抛出Stopiteration错误,可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能通过next函数实现下一个数据,所以iterator的计算是惰性的。

  • 4.自定义迭代器

"""
迭代器:
"""
class Skill:
    pass

class SkillIterator:
    def __init__(self,target):
        self.__target = target
        self.__index = 0

    def __next__(self):
        # 如果没有数据了,抛出异常
        if self.__index > len(self.__target)-1:
            raise StopIteration
        # 返回下一个数据
        temp = self.__target[self.__index]
        self.__index += 1
        return temp

class SkillManger:
    def __init__(self):
        self.__skills = []

    def add_skill(self,skill):
        self.__skills.append(skill)

    def __iter__(self):
        # 创建一个迭代器对象,并传递需要被迭代的数据
        return SkillIterator(self.__skills)

manger = SkillManger()
manger.add_skill(Skill())
manger.add_skill(Skill())
manger.add_skill(Skill())

# for item in manger:
#     print(item)

iterator = manger.__iter__()
while True:
    try:
        item = iterator.__next__()
        print(item)
    except StopIteration:
        break
  • 5.迭代器的优缺点
    • 优点
      • 为序列和非序列类型提供了一种统一的迭代取值方式。
      • 惰性计算:
        • 迭代器对象表示的是一个数据流,可以只在需要时才去调用next来计算出一个值
        • 就迭代器本身来说,同一时刻在内存中只有一个值,因而可以存放无限大的数据流,
        • 而对于其他容器类型,如列表,需要把所有的元素都存放于内存中,受内存大小的限制,可以存放的值的个数是有限的。
    • 缺点
      • 除非取尽,否则无法获取迭代器的长度
      • 只能取下一个值,不能回到开始,更像是‘一次性的’,迭代器产生后的唯一目标就是重复执行next方法直到值取尽,否则就会停留在某个位置,等待下一次调用next;
      • 若是要再次迭代同个对象,你只能重新调用iter方法去创建一个新的迭代器对象,如果有两个或者多个循环使用同一个迭代器,必然只会有一个循环能取到值。

标签:__,.__,iterator,迭代,python,self,基础,next
From: https://www.cnblogs.com/xwltest/p/18383645

相关文章

  • 2.1_3 数据通信基础知识(码元和带宽)
    一、码元    码元是指用一个固定时长的信号波形(数字脉冲),代表不同离散数值的基本波形,是数字通信中数字信号的计量单位,这个时长内的信号称为k进制码元,而该时长称为码元宽度。当码元的离散状态有m个时,此时码元为m进制码元。1码元可以携带多个比特的信息量。二、数字通信系统......
  • Linux基础软件-dns(二)
    作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。Linux进阶部分又分了很多小的部分,我们刚讲完了Linux日常运维。讲的那些东西都算是系统自带的,但是Linux作为一个服务器操作系统,肯定是要安装运行软件......
  • 使用 Python 和 Selenium 解决 Cloudflare 验证码
     在网络自动化测试或网页数据抓取的过程中,Cloudflare验证码是许多开发者遇到的棘手问题。这一验证码设计的初衷是为了保护网站免受恶意攻击,但它也给合法的自动化操作带来了不小的挑战。那么,使用Python和Selenium,是否有办法有效应对并解决Cloudflare验证码的问题?有哪些技巧和方......
  • Linux基础虚拟化实验
    常见虚拟化技术虚拟化主要厂商及产品介绍:系列PC/服务器版代表VMwareVMwareworkstation、vSphereMicrosoftVirtualPC、Hyper-VRedHatKVM、RHEVcitrixXenoracleOracleVMVIrtualBox       虚拟化与云计算的关系:虚拟化:一种技术,顾名......
  • mysql基础
    一、启停说明:docker部署dockerps-a|grepmysqldockerstart/stopname二、客户端1、命令行连接mysql-h127.0.0.1-P3306-uroot-p参数说明-h数据库地址-P端口-u用户-p密码-D库名--help帮助2、工具连接如navicat,需要自行破解......
  • JAVA基础之二-面向对象简述
    java基础之二-面向对象简述一、概述如果有机会多接触几种语言,对于程序员多少是有好处的,至少有助于理解代码的运行真谛。高级语言有很多是面向对象的,因为面向对象的优点是显而易见的。这里比较知名的有rust,java,c++,c#但也有很多语言是面向过程的,鼎鼎有名有C,还有现在大家不......
  • 目录PyCharm Community Edition、python3.11、pythonProject之间的关系
    PyCharmCommunityEdition类型:PyCharmCommunityEdition是由JetBrains公司提供的免费、开源的集成开发环境(IDE)。用途:它专门为Python开发设计,提供了代码编辑、运行、调试、测试等功能。特点:包括智能代码补全、代码分析、图形化界面设计、版本控制集成等高级功能。Pyt......
  • 基于python+flask框架的摄影论坛(开题+程序+论文) 计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,摄影作为一种艺术形式与记录生活的方式,在大众中普及度日益提升。摄影爱好者们渴望一个能够交流心得、分享作品、......
  • 基于python+flask框架的校园疫情防控管理系统(开题+程序+论文) 计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景近年来,全球范围内疫情的反复出现对教育行业带来了前所未有的挑战,尤其是校园作为人群密集场所,其疫情防控工作显得尤为重要。随着科技的进步......
  • 信息学奥赛初赛天天练-76-NOIP2015普及组-基础题1-计算机存储、硬件系统、操作系统、
    NOIP2016普及组基础题111MB等于()A10000字节B1024字节C1000×1000字节D1024×1024字节2在PC机中,PENTIUM(奔腾)、酷睿、赛扬等是指()A生产厂家名称B硬盘的型号CCPU的型号D显示器的型号3操作系统的作用是()A把源程序译成目......