当前位置: 首页 > news >正文

学习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.迭代器&#xff08;Iterator&#xff09; 概念&#xff1a; 迭代意味着重复多次&#xff0c;就像循环一样。 迭代器是一个可以记住遍历的位置的对象。 迭代器对象从集合的第一个元素开始访问&#xff0c;直到所有的元素被访问完结束。 迭代器只能往前不会后退。 1.iter…...

车机端同步outlook日历

最近在开发一个车机上的日历助手&#xff0c;其中一个需求就是要实现手机端日历和车机端日历数据的同步。然而这种需求似乎没办法实现&#xff0c;毕竟手机日历是手机厂商自己带的系统应用&#xff0c;根本不能和车机端实现数据同步的。 那么只能去其他公共的平台寻求一些机会&…...

教学案例:k相同的一次函数的图像关系

【题目】 请在同一个平面直角坐标系中画出一次函数y2x, y2x4的图象&#xff0c;并观察图象&#xff0c;你发现这两个图形有什么位置关系&#xff1f;为什么&#xff1f; 【答案】 图象是相互平行的两条直线 【解析】 一、教学活动形式 这里设计的教学活动形式是“画图 →…...

EmoAva:首个大规模、高质量的文本到3D表情映射数据集。

2024-12-03&#xff0c;由哈尔滨工业大学&#xff08;深圳&#xff09;的计算机科学系联合澳门大学、新加坡南洋理工大学等机构创建了EmoAva数据集&#xff0c;这是首个大规模、高质量的文本到3D表情映射数据集&#xff0c;对于推动情感丰富的3D头像生成技术的发展具有重要意义…...

Elasticsearch vs 向量数据库:寻找最佳混合检索方案

图片来自Shutterstock上的Bakhtiar Zein 多年来&#xff0c;以Elasticsearch为代表的基于全文检索的搜索方案&#xff0c;一直是搜索和推荐引擎等信息检索系统的默认选择。但传统的全文搜索只能提供基于关键字匹配的精确结果&#xff0c;例如找到包含特殊名词“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合成视频出错&#xff1a; 问题一&#xff1a;导入moviepy.editor找不到editor&#xff0c;No module named moviepy.editor问题二&#xff1a;合成的视频没有声音 问题一&#xff1a;导入moviepy.editor找不到editor&#xff0c;No module named moviepy.editor from …...

rsync 是一个非常强大的 Linux 工具,常用于文件和目录的同步、备份和传输。

rsync 是一个非常强大的 Linux 工具,常用于文件和目录的同步、备份和传输。它可以高效地同步本地和远程系统上的文件和目录,并且支持增量传输,仅同步发生变化的部分。rsync 支持压缩传输、删除多余文件、排除特定文件等多种功能,是日常运维、备份和迁移数据的重要工具。 一…...

触发器案例详解

目录 一、定义二、类型三、功能与用途四、创建与调用DML触发器格式示例DDL触发器格式示例登录触发器格式示例五、案例案例一:DML触发器 - 记录更新操作的触发器案例二:DML触发器 - 防止非法工资更新的触发器案例三:DDL触发器 - 记录表结构更改的触发器案例四:DDL触发器 - 防…...

jwt 与 sessionid 的区别及应用场景

在现代 Web 应用中&#xff0c;JWT&#xff08;JSON Web Token&#xff09;和SessionID是两种常用的用户认证和状态管理机制。本文从两者的原理、区别、优缺点以及适用场景展开分析&#xff0c;结合常见问题提出了最佳实践建议&#xff0c;帮助开发者更好地选择和使用。 JWT与S…...

tomcat和nginx

Tomcat 和 Nginx 都可以部署 Web 应用&#xff0c;但它们的核心功能和适用场景不同&#xff0c;因此在 2024 年生产环境及未来&#xff0c;是否使用 Tomcat 取决于需求和技术架构的特点。 1. Tomcat 的特点与适用场景 Tomcat 是 Java Servlet 容器&#xff0c;主要用来运行基于…...

服务器带宽与数据安全的重要性与作用

服务器带宽指的是服务器与外部网络通信的能力&#xff0c;即服务器发送和接收数据的速率。带宽越大&#xff0c;服务器在同一时间内能够处理的数据量就越多&#xff0c;数据传输的速度和稳定性也就越高。在数字化时代&#xff0c;企业对于数据的依赖程度日益加深&#xff0c;无…...

JSON数据处理

1. JSON注解 Data NoArgsConstructor AllArgsConstructor JsonIgnoreProperties(ignoreUnknowntrue) JSON注解&#xff1a; JsonIgnoreProperties(ignoreUnknowntrue) Hutool 日期格式化&#xff1a; DatePattern DateTimeFormat(pattern "yyyy-MM-dd HH:mm:ss")…...

FSWIND脉动风-风载时程生成器软件原理

大量风的实测资料表明&#xff0c;在风的时程曲线中&#xff0c;瞬时风速包含两个部分&#xff1a;一部分是自振周期一般在 10 分钟以上的平均风&#xff0c;另一部分是周期一般只有几秒左右的脉动风。平均风由于其周期一般比结构的自振周期大&#xff0c;因而考虑其作用性质相…...

搭建高可用负载均衡系统:Nginx 与云服务的最佳实践

搭建高可用负载均衡系统&#xff1a;Nginx 与云服务的最佳实践 引言 在项目开发过程中&#xff0c;我们通常在开发和测试阶段采用单机架构进行开发和测试。这是因为在这个阶段&#xff0c;系统的主要目的是功能实现和验证&#xff0c;单机架构足以满足开发人员的日常需求&…...

对比git命令与TortoiseGit工具,理解git解决冲突的过程

1 引言 此前用TortoiseSvn习惯了&#xff0c;所以&#xff0c;转到git时也同时选择了TortoiseGit工具。 同时&#xff0c;对比了可视化工具和git命令的操作&#xff0c;来深入理解git解决冲突的方式。 2 使用远程仓库替代本地仓库的内容 2.1 TortoiseGit做法 using “MERGE_…...

guava缓存的get方法的回调函数讲解一下

CacheBuilder.newBuilder()//设置缓存初始大小&#xff0c;应该合理设置&#xff0c;后续会扩容.initialCapacity(10)//最大值.maximumSize(100)//并发数设置.concurrencyLevel(5)//缓存过期时间&#xff0c;写入后10分钟过期.expireAfterWrite(600,TimeUnit.SECONDS)//统计缓存…...

React基础知识四 Hooks

什么是hooks&#xff1f; (coderwhy) hooks是react 16.8&#xff08;2019年&#xff09;出的新特性。 react有两种形式来创建组件——类式和函数式。在hooks之前类式组件就是react最主流的编程方式。 这个时候&#xff0c;函数式组件是非常鸡肋的&#xff0c;几乎没什么用。因…...

线性代数中的谱分解

一、谱分解的基本原理 谱分解&#xff08;Spectral Decomposition&#xff09;是线性代数中的一个重要概念&#xff0c;特别是在研究矩阵的特征值和特征向量时。它指的是将一个矩阵分解为其特征值和特征向量的组合&#xff0c;从而简化矩阵的运算和分析。谱分解通常适用于对称…...

Redis 数据结结构(一)—字符串、哈希表、列表

Redis&#xff08;版本7.0&#xff09;的数据结构主要包括字符串&#xff08;String&#xff09;、哈希表&#xff08;Hash&#xff09;、列表&#xff08;List&#xff09;、集合&#xff08;Set&#xff09;、有序集合&#xff08;Sorted Set&#xff09;、超日志&#xff08…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器&#xff08;ADC&#xff09;&#xff0c;支持8kHz~96kHz采样率&#xff0c;集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器&#xff0c;适用于高保真音频采集场景。 2. 核心特性 高精度&#xff1a;24位分辨率&#xff0c…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

【若依】框架项目部署笔记

参考【SpringBoot】【Vue】项目部署_no main manifest attribute, in springboot-0.0.1-sn-CSDN博客 多一个redis安装 准备工作&#xff1a; 压缩包下载&#xff1a;http://download.redis.io/releases 1. 上传压缩包&#xff0c;并进入压缩包所在目录&#xff0c;解压到目标…...