学习Python的笔记14--迭代器和生成器
1.迭代器(Iterator)
概念:
迭代意味着重复多次,就像循环一样。
迭代器是一个可以记住遍历的位置的对象。
迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。
迭代器只能往前不会后退。
1.iter():返回迭代器自身。2.next():返回容器的下一个元素,如果没有元素了,抛StopIteration异常。也可以使用内置函数
next,next(it)和it.next()等效。
1、可迭代对象(Iterable)
可以被用作如for循环之中对象通常都是可迭代的。
其中一些包括:所有的序列类型,如:list,str,tuple。
集合类型,如:set,frozenset。
映射类型,如:dict。
文件对象和其他满足迭代协议的对象(即实现了iter方法或者getitem方法)
2、不可迭代对象
那些不支持迭代协议的对象都是非迭代对象,常见的有:数字类型:int,float ...
#[1.list]
#列表是可迭代的
my_list=[1,2,3]
for item in my_list:print(item)
'''
会依次打印1,2,3
'''
#[2.string]
#字符串也是可迭代的
my_string="hello"
for char in my_string:print(char)
'''
会依次打印'h','e','l','l','o'
'''
#[3.dict]
#字典是可迭代的,迭代的是它的键
my_dict={'a':1,'b':2}
for key in my_dict:print(key)
'''
#会依次打印'a','b'
'''
#[4.int]
#数字是非可迭代的
my_number=10
print(my_number.__iter__)#报错#[5.float]
#浮点类型是非可迭代的
float_number=0.34
print(float_number.__iter__)#报错
2、生成器
1、概念:
Python中一种特殊类型的迭代器,本质上是可以记住执行位置的函数。
生成器使用yield语句来生成一个值序列,不是一次性地产生一个完整的数据集并返回。
2、特点:
1.与迭代器类似,生成器也支持惰性计算,它们一次只生成一个项目
2.在每次产生输出之后,其状态会被挂起,直到下一次使用next()函数或for循环请求下一个值
3.当生成器函数执行完成时,或者遇到无法再产生新值的条件时,会抛出StopIteration异常
4.使用生成器函数定义生成器
5.生成器是通过在函数中使用yield关键字来定义的。
每当yield语句运行时,它会返回一个值,并在此时挂起函数的状态,包括局部变量、指针位置等。下一次调用时,它会从中断点继续执行
3、实例:
1、简单生成器函数
def count_up_to(max):count=1
while count<=max:yield countcount+=1
#创建生成器
counter=count_up_to(5)
#使用next()获取值
print(next(counter))#输出1
print(next(counter))#输出2
#可以继续调用next()获取剩余的值,或者使用for循环
for number in counter:print(number)
#输出3 4 5
'''在这个示例中,生成器函数count_up_to接受参数max并计数到这个值。
每次yield被调用,它就会产生当前的计数值,
并在下一次调用时从上次离开的地方继续执行。'''
2、生成器表达式
#使用生成器表达式创建生成器
gen_exp=(x*x for x in range(4))
#使用for循环迭代生成器
for num in gen_exp:print(num)
#依次打印0,1,4,9
'''
生成器表达式看起来类似于列表推导,
但使用圆括号而不是方括号。
它们非常适合于简单
的场景,
其中一个完整的生成器函数可能显得过于冗长。'''
3、yield关键字
用于定义生成器函数中的一个位置,这里会产出(yield)一个值给调用者,并暂停函数的执行,直到下一次通过next()来请求另一个值。
当生成器函数中执行到一个yield表达式时,它会返回该表达式后面的值给生成器的调用者,并暂停执行(所有局部变量和状态都会被保留)。
yield的挂起的函数执行可以在下一次调用next()或迭代时继续从上次暂停的位置恢复。
def simple_generator():print("Stage1")yield 1print("Stage2")yield 2print("Stage3")yield 3
gen=simple_generator()
#每次调用next()时,生成器从上次暂停的地方开始,直到遇到下一个yield
val=next(gen)
#输出"Stage1",返回1
val=next(gen)
#输出"Stage2",返回2
总结生成器的特点:
内存效率:可以用于无法放在内存中的大型数据集。
改善性能:惰性计算意味着只有在必要时才计算值,可以减少不必要的计算节省计算资源。
简洁性:使用生成器和生成器表达式,可以使代码更简洁易懂。
适用于管道处理:生成器可以被链式结合,用于构建复杂的数据管道。
相关文章:
学习Python的笔记14--迭代器和生成器
1.迭代器(Iterator) 概念: 迭代意味着重复多次,就像循环一样。 迭代器是一个可以记住遍历的位置的对象。 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。 迭代器只能往前不会后退。 1.iter…...
车机端同步outlook日历
最近在开发一个车机上的日历助手,其中一个需求就是要实现手机端日历和车机端日历数据的同步。然而这种需求似乎没办法实现,毕竟手机日历是手机厂商自己带的系统应用,根本不能和车机端实现数据同步的。 那么只能去其他公共的平台寻求一些机会&…...
教学案例:k相同的一次函数的图像关系
【题目】 请在同一个平面直角坐标系中画出一次函数y2x, y2x4的图象,并观察图象,你发现这两个图形有什么位置关系?为什么? 【答案】 图象是相互平行的两条直线 【解析】 一、教学活动形式 这里设计的教学活动形式是“画图 →…...
EmoAva:首个大规模、高质量的文本到3D表情映射数据集。
2024-12-03,由哈尔滨工业大学(深圳)的计算机科学系联合澳门大学、新加坡南洋理工大学等机构创建了EmoAva数据集,这是首个大规模、高质量的文本到3D表情映射数据集,对于推动情感丰富的3D头像生成技术的发展具有重要意义…...
Elasticsearch vs 向量数据库:寻找最佳混合检索方案
图片来自Shutterstock上的Bakhtiar Zein 多年来,以Elasticsearch为代表的基于全文检索的搜索方案,一直是搜索和推荐引擎等信息检索系统的默认选择。但传统的全文搜索只能提供基于关键字匹配的精确结果,例如找到包含特殊名词“Python3.9”的文…...
【Flink-scala】DataStream编程模型之水位线
DataStream API编程模型 1.【Flink-Scala】DataStream编程模型之 数据源、数据转换、数据输出 2.【Flink-scala】DataStream编程模型之 窗口的划分-时间概念-窗口计算程序 3.【Flink-scala】DataStream编程模型之 窗口计算-触发器-驱逐器 文章目录 DataStream API编程模型前言…...
Python导入moviepy找不到editor 视频没有声音设置audio_codec参数
moviepy合成视频出错: 问题一:导入moviepy.editor找不到editor,No module named moviepy.editor问题二:合成的视频没有声音 问题一:导入moviepy.editor找不到editor,No module named moviepy.editor from …...
rsync 是一个非常强大的 Linux 工具,常用于文件和目录的同步、备份和传输。
rsync 是一个非常强大的 Linux 工具,常用于文件和目录的同步、备份和传输。它可以高效地同步本地和远程系统上的文件和目录,并且支持增量传输,仅同步发生变化的部分。rsync 支持压缩传输、删除多余文件、排除特定文件等多种功能,是日常运维、备份和迁移数据的重要工具。 一…...
触发器案例详解
目录 一、定义二、类型三、功能与用途四、创建与调用DML触发器格式示例DDL触发器格式示例登录触发器格式示例五、案例案例一:DML触发器 - 记录更新操作的触发器案例二:DML触发器 - 防止非法工资更新的触发器案例三:DDL触发器 - 记录表结构更改的触发器案例四:DDL触发器 - 防…...
jwt 与 sessionid 的区别及应用场景
在现代 Web 应用中,JWT(JSON Web Token)和SessionID是两种常用的用户认证和状态管理机制。本文从两者的原理、区别、优缺点以及适用场景展开分析,结合常见问题提出了最佳实践建议,帮助开发者更好地选择和使用。 JWT与S…...
tomcat和nginx
Tomcat 和 Nginx 都可以部署 Web 应用,但它们的核心功能和适用场景不同,因此在 2024 年生产环境及未来,是否使用 Tomcat 取决于需求和技术架构的特点。 1. Tomcat 的特点与适用场景 Tomcat 是 Java Servlet 容器,主要用来运行基于…...
服务器带宽与数据安全的重要性与作用
服务器带宽指的是服务器与外部网络通信的能力,即服务器发送和接收数据的速率。带宽越大,服务器在同一时间内能够处理的数据量就越多,数据传输的速度和稳定性也就越高。在数字化时代,企业对于数据的依赖程度日益加深,无…...
JSON数据处理
1. JSON注解 Data NoArgsConstructor AllArgsConstructor JsonIgnoreProperties(ignoreUnknowntrue) JSON注解: JsonIgnoreProperties(ignoreUnknowntrue) Hutool 日期格式化: DatePattern DateTimeFormat(pattern "yyyy-MM-dd HH:mm:ss")…...
FSWIND脉动风-风载时程生成器软件原理
大量风的实测资料表明,在风的时程曲线中,瞬时风速包含两个部分:一部分是自振周期一般在 10 分钟以上的平均风,另一部分是周期一般只有几秒左右的脉动风。平均风由于其周期一般比结构的自振周期大,因而考虑其作用性质相…...
搭建高可用负载均衡系统:Nginx 与云服务的最佳实践
搭建高可用负载均衡系统:Nginx 与云服务的最佳实践 引言 在项目开发过程中,我们通常在开发和测试阶段采用单机架构进行开发和测试。这是因为在这个阶段,系统的主要目的是功能实现和验证,单机架构足以满足开发人员的日常需求&…...
对比git命令与TortoiseGit工具,理解git解决冲突的过程
1 引言 此前用TortoiseSvn习惯了,所以,转到git时也同时选择了TortoiseGit工具。 同时,对比了可视化工具和git命令的操作,来深入理解git解决冲突的方式。 2 使用远程仓库替代本地仓库的内容 2.1 TortoiseGit做法 using “MERGE_…...
guava缓存的get方法的回调函数讲解一下
CacheBuilder.newBuilder()//设置缓存初始大小,应该合理设置,后续会扩容.initialCapacity(10)//最大值.maximumSize(100)//并发数设置.concurrencyLevel(5)//缓存过期时间,写入后10分钟过期.expireAfterWrite(600,TimeUnit.SECONDS)//统计缓存…...
React基础知识四 Hooks
什么是hooks? (coderwhy) hooks是react 16.8(2019年)出的新特性。 react有两种形式来创建组件——类式和函数式。在hooks之前类式组件就是react最主流的编程方式。 这个时候,函数式组件是非常鸡肋的,几乎没什么用。因…...
线性代数中的谱分解
一、谱分解的基本原理 谱分解(Spectral Decomposition)是线性代数中的一个重要概念,特别是在研究矩阵的特征值和特征向量时。它指的是将一个矩阵分解为其特征值和特征向量的组合,从而简化矩阵的运算和分析。谱分解通常适用于对称…...
Redis 数据结结构(一)—字符串、哈希表、列表
Redis(版本7.0)的数据结构主要包括字符串(String)、哈希表(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set)、超日志(…...
高校学生综合测评管理系统(10054)
有需要的同学,源代码和配套文档领取,加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码(前后端源代码SQL脚本)配套文档(LWPPT开题报告/任务书)远程调试控屏包运行一键启动项目&…...
Adobe-GenP:告别订阅烦恼,5分钟解锁Adobe全家桶完整功能
Adobe-GenP:告别订阅烦恼,5分钟解锁Adobe全家桶完整功能 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP 你是否曾被Adobe Creative Cloud的高…...
5G NR(新空口)物理层设计解析
5G NR(新空口)物理层设计解析 在无线通信技术的演进过程中,5G NR(新空口)作为第五代移动通信技术的核心组成部分,其物理层设计承载着提升数据传输速率、降低时延、增强连接密度等多重目标。本文将围绕5G NR…...
车载以太网之要火系列 - 第49篇郭大侠学SOME/IP:人说SOME/IP虽好,对手已在路上跑
写在开篇蓉儿又挖坑上回说到,郭靖学完了SOME/IP的十八般武艺——报文头、Service ID、Instance ID、Method、Event、Field、SD的Offer/Find/Subscribe三驾马车。郭靖合上笔记本,信心满满:“蓉儿,SOME/IP我算是学透了!服…...
嵌入式Linux CPU频率固定:原理、方法与ElfBoard实战
1. 项目概述:为什么需要固定CPU频率?在嵌入式开发领域,尤其是像ElfBoard这样的ARM开发板上进行应用开发或性能调优时,CPU频率的动态调整(DVFS,动态电压频率调整)有时会成为一把双刃剑。对于追求…...
C语言日志分级系统设计:从原理到工业级实现
1. 项目概述:为什么日志分级是C项目的“体检报告” 在C语言项目里,尤其是那些需要长期稳定运行的后台服务、嵌入式系统或者网络中间件,日志系统就是开发者的“眼睛”和“耳朵”。没有它,程序就像在黑箱里运行,一旦出问…...
VMware Unlocker 3.0技术深度解析:如何在非苹果硬件上运行macOS虚拟机的实现原理与实战指南
VMware Unlocker 3.0技术深度解析:如何在非苹果硬件上运行macOS虚拟机的实现原理与实战指南 【免费下载链接】unlocker VMware Workstation macOS 项目地址: https://gitcode.com/gh_mirrors/unloc/unlocker VMware Unlocker 3.0是一个专门为VMware Worksta…...
MATLAB找峰值进阶:用findpeaks函数5个鲜为人知的技巧,让你的科研图表更专业
MATLAB找峰值进阶:用findpeaks函数5个鲜为人知的技巧,让你的科研图表更专业 在科研数据分析中,峰值检测是最基础却又最关键的步骤之一。无论是光谱分析、色谱检测还是振动信号处理,准确识别和量化峰值特征直接影响着研究结论的可信…...
Linux应用层直接操作硬件寄存器:原理、实现与安全实践
1. 项目概述:为什么要在应用层操作寄存器? 在嵌入式Linux开发或者驱动调试的日常工作中,我们常常会遇到一个看似“越界”的需求:在用户空间的应用层程序里,直接去读写某个硬件寄存器的值。这听起来有点“离经叛道”&am…...
ChatGPT支付功能现状深度研判(2024Q2最新政策+OpenAI开发者文档交叉验证)
更多请点击: https://intelliparadigm.com 第一章:ChatGPT实时支付功能在哪里 ChatGPT 本身并不原生支持实时支付功能。OpenAI 官方发布的 ChatGPT(包括免费版、Plus 订阅版及 Team/Enterprise 版)定位为人工智能对话助手&#x…...
