当前位置: 首页 > 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…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行&#xff1a; rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...

【免费数据】2005-2019年我国272个地级市的旅游竞争力多指标数据(33个指标)

旅游业是一个城市的重要产业构成。旅游竞争力是一个城市竞争力的重要构成部分。一个城市的旅游竞争力反映了其在旅游市场竞争中的比较优势。 今日我们分享的是2005-2019年我国272个地级市的旅游竞争力多指标数据&#xff01;该数据集源自2025年4月发表于《地理学报》的论文成果…...