Python语法进阶笔记(五)

一、可迭代对象

  1. 可迭代对象Iterable

    1. 遍历(迭代):依次从对象中把一个个元素取出来的过程

    2. 数据类型:str、list、tuple、dict、set等

  2. 可迭代对象的条件

    1. 对象实现了_ _ iter _ _ () 方法

    2. _ _iter _ _() 返回了迭代器对象

  3. for 循环工作原理

    1. 先通过_ _ iter _ _ () 获取可迭代对象的迭代器

    2. 对获取到的迭代器不断调用_ _ next _ _ ()方法,来获取下一个值并将其赋值给临时变量(比如 i)

  4. isinstance() : 判断一个对象是否是可迭代对象或者是一个已知的数据类型

    1. isinstance(o,t): o: 对象, t : 类型,可以是直接或是间接类名,基本类型或者元组

    2. 使用方式:

      • 先导入模块,在python 3.3以上版本中,需要使用from collections.abc import Iterable

      • 使用isinstance() 判断

        from collections.abc import Iterable st = '123' print(isinstance(st, Iterable)) # True print(isinstance([1,2,3], int)) # False print(isinstance(st, (int, list))) # False 既不是int ,也不是list

二、迭代器 (Iterator)

  1. 含义:是一个可以记住遍历位置的对象:在上次停留的位置继续去做一些事情

  2. iter():获取可迭代对象的迭代器

  3. next():一个个去取元素,取完后会引发一个异常

    li = [1,2,3] #1. 创建迭代器对象 iter_obj = iter(li) print(iter_obj) # <list_iterator object at 0x0000023A7B359480> # 2. 获取吓下一条数据 print(next(iter_obj)) # 1 print(next(iter_obj)) # 2 print(next(iter_obj)) # 3 # 3. 取完元素后,再使用next()会引发StopIteration异常
  4. 步骤总结:

    1. iter () 调用对象的 __ iter__(),并把 __ iter__() 方法的返回结果作为自己的返回值

    2. next () 调用对象的 __ next__(),一个个取元素

    3. 所有元素都取完了,__ next__() 将引发 StopIteration 异常

  5. 可迭代对象iterable和迭代器iterator区别

    • 凡是可以作用于for 的循环都属于可迭代对象

    • 凡是可以作用于next()的都是迭代器

    • 可迭代对象不一定是迭代器对象,迭代器对象一定是可迭代对象

    • 总结:

      可迭代对象可以通过iter()函数转换为迭代器对象

      如果一个对象拥有__iter__()方法,那么这个对象就是可迭代对象,

      一个对象拥有 __ next__()和__iter__()方法,那么这个对象就是迭代器对象

      迭代器 = iter(可迭代对象)

      下个值 = next(迭代器)

    • 注意:dir(): 查看对象所有属性和方法

    from collections.abc import Iterator, Iterable name = '小象' print(isinstance(name, Iterable)) # True print(isinstance(name, Iterator)) # False #说明:可迭代对象不一定是迭代器对象 name1 = iter(name) # 将name转换为迭代器对象 print(isinstance(name1, Iterable)) # True print(isinstance(name1, Iterator)) # True # 说明:迭代器对象一定是可迭代对象 #总结: # 可迭代对象可以通过iter()函数转换为迭代器对象 # 如果一个对象拥有__iter__()方法,那么这个对象就是可迭代对象,一个对象拥有 __next__()和__iter__()方法,那么这个对象就是迭代器对象 # dir(): 查看对象所有属性和方法 print(dir(name)) # 包含'__iter__'-------- 可迭代对象 print(dir(name1))# 包含'__iter__'、'__next__' -----------迭代器
  6. 迭代器协议:

    对象必须提供一个next方法,执行该方法要么就返回迭代中的下一项,要么就引发StopIteration异常,来终止迭代

  7. 自定义迭代器类:

    两个特性:__ iter __ () 和 __ next__ ()

    class MyIterator(object): def __init__(self): self.num = 0 def __iter__(self): return self # 返回迭代器对象本身,当前迭代器类的实例对象 def __next__(self): if self.num == 5: # 抛出迭代结束的异常 raise StopIteration("终止迭代") self.num += 1 return self.num mi = MyIterator() print(mi) for i in mi: print(i)

三、生成器(generator)

Python中一边循环一边计算的机制,叫做生成器

  1. 生成器表达式

    列表推导式:li =[ i*5 for i in range(5)]------> [ ] 改为(),就变成了生成器表达式

    gen = ( i*5 for i in range(5) )

  2. 生成器函数

    Python中使用了yield 关键字的函数就称为生成器函数

    yield:

    1. 类似return,将指定值或者多个值返回给调用者

    2. yield 语句依次返回一个结果,在每个结果中介,挂起函数,执行next(),再重新从挂起点继续往下执行 ,是函数中断,并保存终端的状态

      def gen(): print("开始执行") yield "a" # 返回a,暂停函数,在此处挂起,下一次再从此处恢复运行 yield "b" yield "c" gen01 = gen() print(next(gen01)) # 开始执行 a print(next(gen01))# b def gen2(n): li = [] for i in range(n): li.append(i) yield i print(li) print(gen2(5)) for i in gen2(5): print(i) # <generator object gen2 at 0x0000020927488E40> # 0 # 1 # 2 # 3 # 4 # [0, 1, 2, 3, 4] def test(): yield 1 yield 2 yield 3 print(test()) print(next(test())) # 加括号是调用函数 ,从头开始,每次都是1 print(next(test()))#c1 te = test() print(next(te)) # 从对象中取值 1 print(next(te))# 2 print(next(te))# 3

四、三者关系

  • 可迭代对象:指实现了python迭代协议,可以通过 for... in...循环遍历的对象,比如list、dict、str...迭代器、生成器

  • 迭代器: 可以记住自己遍历位置的对象,直观体现就是可以使用next()函数返回值,迭代器只能往前,不能往后。当遍历完毕之后,next()会抛出异常

  • 生成器:是特殊的迭代器,需要注意迭代器不一定是生成器,它是python提供的通过简便的方法写出迭代器的一种手段

  • 包含关系:可迭代对象>迭代器>生成器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1190724.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第二篇冲刺博客

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/Class12Grade23ComputerScience/这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/Class12Grade23ComputerScience/homework/13474第2天敏捷冲刺日…

Python语法进阶笔记(五)

一、可迭代对象可迭代对象Iterable遍历&#xff08;迭代&#xff09;&#xff1a;依次从对象中把一个个元素取出来的过程数据类型&#xff1a;str、list、tuple、dict、set等可迭代对象的条件对象实现了_ _ iter _ _ () 方法_ _iter _ _() 返回了迭代器对象for 循环工作原理先通…

struts2 命令执行 (CVE-2016-3081)

直接使用工具跑存在漏洞,直接执行命令

paperxie 毕业论文:硕士专属智能写作工具,30000 字高质论文轻松交付

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/aippt https://www.paperxie.cn/ai/dissertationhttps://www.paperxie.cn/ai/dissertationhttps://www.paperxie.cn/ai/dissertation 在硕士生涯的后半程&#xff0c;毕业论文的写作压力几乎是每个学子都要…

人群仿真软件:Legion_(2).Legion软件安装与配置

Legion软件安装与配置 前言 在进行人群仿真分析之前&#xff0c;首先需要安装和配置Legion软件。本节将详细介绍Legion软件的安装步骤和配置方法&#xff0c;确保用户能够在自己的计算机上顺利运行Legion仿真软件。 1. 系统要求 在安装Legion软件之前&#xff0c;确保您的计…

1.20 2026多校冲刺省选模拟赛3题解

2026多校冲刺省选模拟赛3题解2026多校冲刺省选模拟赛3题解 感觉这场比赛稍微有点体验感,除了T1没有m? T2放科技? 但是我打的很烂,预计打了 40 + 65 + 70 实际只有 0 + 45 + 70,感觉T1是个水题但是没有切掉,T3考场…

几类高质量的开源 3D 控件/库推荐:

1. Web 前端与可视化(JavaScript/TypeScript)如果你是在网页端开发,无论是数据大屏还是数字孪生项目,这些库是目前的“顶流”。Three.js 🌐定位:Web 3D 开发的“标准库”。特点:基于 WebGL,拥有极其庞大的社区…

人群仿真软件:Legion_(4).Legion用户界面介绍

Legion用户界面介绍 1. 用户界面概述 Legion是一款专业的人群仿真软件&#xff0c;用户界面设计简洁、直观&#xff0c;旨在为用户提供高效、易用的仿真环境。本节将详细介绍Legion用户界面的主要组成部分及其功能&#xff0c;帮助用户快速上手并进行人群仿真。 1.1 主窗口 主窗…

为什么在 Windows 的运行对话框(Win + r)里输入 code 会打开 VSCode ???

我原本是用文件夹里保存 shortcut 的方式快速打开一些东西的 但是这台电脑是新装的,很多东西只是按照老电脑复原了一下,并没有仔细检查 刚刚才发现输入 code 并没有弹出我的代码文件夹 而是直接启动了VSCode,并且打…

科研党效率革命:paperxie 科研绘图,让数据变成高分论文的视觉密码

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/aippt https://www.paperxie.cn/drawinghttps://www.paperxie.cn/drawinghttps://www.paperxie.cn/drawing 在科研论文的世界里&#xff0c;一张精准、专业的图表&#xff0c;往往比千言万语更有说服力。但…

【图像加密】基于差分扩展的缩略图保持加密技术附matlab代码

✅作者简介&#xff1a;热爱数据处理、建模、算法设计的Matlab仿真开发者。&#x1f34e;更多Matlab代码及仿真咨询内容点击 &#x1f517;&#xff1a;Matlab科研工作室&#x1f34a;个人信条&#xff1a;格物致知。&#x1f525; 内容介绍在数字化浪潮的席卷下&#xff0c;数…

6款写论文AI工具测评:AI智能润色+提升学术原创性,高效搞定论文写作! - 麟书学长

还在为论文写作焦虑?AI工具可助效率提升十倍!本文深度测评6款顶尖AI论文写作工具,含PaperFine、TXYZ等,覆盖从选题到定稿全流程。以功能全面的PaperFine为例,详解从创建项目、生成大纲、智能撰写、问卷处理到降重…

从选题到定稿:paperxie 毕业论文工具如何让本科毕业不再 “渡劫”

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/aippt https://www.paperxie.cn/ai/dissertationhttps://www.paperxie.cn/ai/dissertationhttps://www.paperxie.cn/ai/dissertation 又到毕业季&#xff0c;朋友圈里一半是旅行打卡的狂欢&#xff0c;一半…

稿定设计:促销海报模板与在线制作实践指南

在电商推广、门店引流、品牌活动乃至新品上市等商业场景中&#xff0c;高效的促销宣传是吸引消费者关注、提升转化效率的核心环节。而促销海报作为直观且极具冲击力的视觉营销工具&#xff0c;其设计质量直接影响优惠信息传递效果与品牌吸引力塑造。然而&#xff0c;众多企业、…

Excel公式三大运算符全解析:数学计算、逻辑判断与文本连接实战指南

当你理解、>、&这三个符号在Excel中的真正含义时&#xff0c;就掌握了公式世界的底层语言。 一、数学运算符&#xff1a;Excel的"计算引擎" 六大基础算术运算符详解 在Excel中&#xff0c;数学运算符是构建所有计算的基础。以下是必须掌握的六大运算符&…

【总结】说课的关键维度

我为您梳理出以下五个亟待系统总结的关键维度。这些维度既是当前优质说课的核心要素,也是教师专业发展的重要突破口:一、说课中的教学亮点提炼方法(最需系统化总结) 知识库中90%的说课稿都包含"教学亮点"…

基于网页在线标定板的 Halcon 单目相机标定

本文记录了一次完整的 Halcon 单目相机标定过程,使用标定板在线生成器作为电子标定板,通过 Halcon 对手上闲置的罗技网络摄像机 C930E 进行了标定,平均重投影误差可以做到 0.056 pixel。1、器材准备 本次标定的器材…

2026.1.20 SQL Server命令

创建&#xff1a;create 修改&#xff1a;alter 删除&#xff1a;drop mdf ndf ldf 主文件 辅助文件 日志文件 create database [数据库名] #创建数据库 on primary #主数据文件 …

开源鸿蒙PC版真机运行——开源鸿蒙原生开发案例之魅力河北应用之河北简介

文章目录开源鸿蒙PC版真机运行——开源鸿蒙原生开发案例之魅力河北应用之河北简介一、背景二、开源鸿蒙与PC真机运行三、河北简介核心代码四、运行效果五、心得与总结开源鸿蒙PC版真机运行——开源鸿蒙原生开发案例之魅力河北应用之河北简介 随着 HarmonyOS 6 在 PC 端的落地&…

创建CUDA11.8环境部署DeepSeek-OCR

完整部署步骤&#xff1a;Linux下保留系统CUDA12.6&#xff0c;通过Conda创建CUDA11.8环境部署DeepSeek-OCR 核心逻辑&#xff1a;利用Conda环境隔离性&#xff0c;在新环境中安装CUDA11.8 toolkit&#xff0c;系统CUDA12.6完全不受影响&#xff0c;所有依赖均在隔离环境内安装…