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

python笔记(14)迭代器和生成器

 迭代器的优势

  • 延迟计算:迭代器按需提供数据,无需一次性加载整个数据集到内存中,特别适合处理大规模或无限数据流。
  • 资源效率:减少内存占用,尤其在处理大量数据时,避免一次性构建完整数据结构带来的开销。
  • 统一接口:任何支持迭代协议的对象都可以在for循环中无缝使用,提供一致的遍历体验。

迭代器

迭代器是一个可以记住遍历的位置的对象

迭代器是一个实现了特定协议的对象,它能够按照一定的顺序返回集合中的元素。在Python中,一个对象要成为迭代器,需要满足以下条件:

  1. 实现__iter__()方法:返回迭代器对象自身,表明该对象是可迭代的。

  2. 实现__next__()方法:返回序列中的下一个元素。当没有更多元素时,抛出StopIteration异常。

借助iter()函数,您可以轻松地将任何可迭代对象(如列表、字典、字符串等)转换为其对应的迭代器。迭代器通常与for循环搭配使用,因为for循环会自动调用__iter__()__next__()方法。

示例:使用迭代器遍历列表

numbers = [1, 2, 3, 4, 5]# 获取列表的迭代器
it = iter(numbers)# 使用迭代器逐个访问元素
while True:try:number = next(it)print(number)except StopIteration:break

生成器(Generators)

生成器是迭代器的一种特殊实现,它以更简洁、易于维护的方式创建迭代器。生成器有两种形式:生成器函数和生成器表达式。

生成器函数

生成器函数使用yield关键字替代return来返回值。当函数被调用时,它并不会立即执行函数体,而是返回一个生成器对象。每次对生成器对象调用next()方法时,函数从上次暂停的位置(即上次yield语句处)恢复执行,直到遇到下一个yield表达式,此时返回该表达式的值,并再次暂停。一旦函数结束或没有更多yield语句,就会抛出StopIteration异常。

示例:生成器函数生成斐波那契数列

def fibonacci(n):a, b = 0, 1for _ in range(n):yield aa, b = b, a + b# 创建生成器对象
fib_gen = fibonacci(10)# 使用for循环或next()方法遍历生成器
for num in fib_gen:print(num)
生成器表达式

生成器表达式是一种类似列表推导式的语法结构,但使用圆括号而不是方括号。它返回一个生成器对象,而非直接创建列表。生成器表达式同样适用于处理大型数据集,因为它按需生成值,而非一次性生成所有元素。

示例:生成器表达式过滤偶数

numbers = range(1, 11)
even_numbers_gen = (num for num in numbers if num % 2 == 0)# 遍历生成器表达式的结果
for num in even_numbers_gen:print(num)

生成器的附加方法

除了__iter__()__next__()方法外,生成器还提供了几个附加方法,增加了与生成器的交互能力:

  • send(value):向生成器发送一个值,恢复执行并返回下一个yield表达式的值。首次调用send()时,应传入None以启动生成器。

  • throw(exception_type[, value[, traceback]]):向生成器抛出一个异常,使其在捕获该异常的位置恢复执行。

  • close():导致生成器抛出GeneratorExit异常,用于终止生成器的执行。

应用场景

  • 处理大数据:遍历大型文件、网络流或数据库查询结果,避免一次性加载全部数据。

  • 计算密集型任务:分步计算复杂问题,如动态规划、斐波那契数列等,按需生成中间结果。

  • 模拟无限序列:生成无限随机数序列、模拟实时数据流等。

  • 资源优化:在内存受限环境中,如嵌入式设备或微服务,减少内存消耗。

相关文章:

python笔记(14)迭代器和生成器

迭代器的优势 延迟计算:迭代器按需提供数据,无需一次性加载整个数据集到内存中,特别适合处理大规模或无限数据流。资源效率:减少内存占用,尤其在处理大量数据时,避免一次性构建完整数据结构带来的开销。统…...

简单3步,OpenHarmony上跑起ArkUI分布式小游戏

标准系统新增支持了方舟开发框架(ArkUI)、分布式组网和 FA 跨设备迁移能力等新特性,因此我们结合了这三种特性使用 ets 开发了一款如下动图所示传炸弹应用。 打开应用在通过邀请用户进行设备认证后,用户须根据提示完成相应操作&am…...

GPT-3和自然语言处理的前沿:思考AI大模型的发展

引言 自然语言处理(NLP)是人工智能(AI)领域中最富有挑战性和活跃的研究领域之一。近年来,随着深度学习技术的发展和计算能力的提高,大型语言模型,尤其是OpenAI的GPT-3,已成为推动该…...

傅里叶变换例题

目录 傅里叶转化例题: 时移 频移 尺度 时域卷积性质:卷积==乘机...

基于Docker构建CI/CD工具链(六)使用Apifox进行自动化测试

添加测试接口 在Spring Boot Demo项目里实现一个简单的用户管理系统的后端功能。具体需求如下: 实现了一个RESTful API,提供了以下两个接口 : POST请求 /users:用于创建新的用户。GET请求 /users:用于获取所有用户的列…...

Java 中建造者模式,请用代码具体举例

建造者模式是一种创建型设计模式,它允许你创建一个复杂对象的不同部分并将它们组装在一起,以产生最终的对象。以下是一个简单的 Java 示例,演示了建造者模式的用法: // 产品类 class Computer {private String cpu;private String…...

Tomcat 启动闪退问题解决方法

总体思路 解决Tomcat闪退问题,您可以尝试以下几种方法: 检查安装过程:确保您的Tomcat安装过程没有遗漏任何步骤。如果是zip包形式的Tomcat,解压后通常不需要额外配置环境变量。编辑启动脚本:打开Tomcat安装目录下的bi…...

使用docker部署数据可视化平台Metabase

目前公司没有人力开发数据可视化看板,因此考虑自己搭建开源可视化平台MetaBase。在此记录下部署过程~ 一、镜像下载 docker pull metabase/metabase:latest 运行结果如下: 二、创建容器 docker run -dit --name matebase -p 3000:3000\ -v /home/loc…...

数图智慧零售解决方案,赋能零售行业空间资源价值最大化

数图智慧零售解决方案 赋能零售行业空间资源价值最大 在激烈的市场竞争中,如何更好地提升空间资源价值,提高销售额,成为行业关注的焦点。近日,NIQ发布的《2024年中国饮料行业趋势与展望》称,“在传统零售业态店内&…...

Django中的实时通信:WebSockets与异步视图的结合【第167篇—实时通信】

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在现代Web应用程序中,实时通信已经成为了必不可少的功能之一。无论是在线聊天、…...

R 格式(蓝桥杯)

文章目录 R 格式【问题描述】解题思路高精度乘法高精度加法 R 格式 【问题描述】 小蓝最近在研究一种浮点数的表示方法:R 格式。对于一个大于 0 的浮点数 d,可以用 R 格式的整数来表示。给定一个转换参数 n,将浮点数转换为 R格式整数的做法…...

Intellij idea的快速配置详细使用

IntelliJ IDEA是一款强大的集成开发环境(IDE),支持多种编程语言,包括Java、Kotlin、Scala等。以下是关于IntelliJ IDEA的快速配置和使用的详细步骤: 一、安装 前往IntelliJ IDEA的官方网站或可靠的软件下载平台&…...

JavaEE:JVM

基本介绍 JVM:Java虚拟机,用于解释执行Java字节码 jdk:Java开发工具包 jre:Java运行时环境 C语言将写入的程序直接编译成二进制的机器语言,而java不想重新编译,希望能直接执行。Java先通过javac把.java…...

Linux基础|线程池Part.1|线程池的定义和运行逻辑

线程池的定义和运行逻辑 多线程的问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。 那么一个很自然的想法就出现了…...

蓝队面试经验总结

Sql注入 1、sql注入漏洞原理 开发者没有在网页传参点做好过滤,导致恶意 sql 语句拼接到数据库进行执行 2、sql注入分类 联合注入 、布尔盲注 、时间盲注 、堆叠注入 、宽字节注入 、报错注入 3、堆叠注入原理 在 mysql 中,分号 代表一个查询语句的…...

MySQL命令分类与大纲

一、数据库管理 创建与删除数据库 CREATE DATABASE:创建新数据库DROP DATABASE:删除已存在的数据库ALTER DATABASE:修改数据库属性 切换与查看数据库 USE:选择当前工作数据库SHOW DATABASES:列出所有可用数据库 二、…...

windows编译xlnt,获取Excel表里的数据

用git拉取项目 这个文件是空的 要用git拉下来&#xff0c;使用终端编译xlnt库 点击解决方案 运行生成 然后新建项目&#xff0c;配置好库&#xff0c; #include <iostream> #include <xlnt/xlnt.hpp>int main() {// 打开 Excel 文件xlnt::workbook workbook;workb…...

c#字段和属性的区别

在C#中&#xff0c;字段&#xff08;fields&#xff09;和属性&#xff08;properties&#xff09;都是类的成员&#xff0c;它们提供了类存储数据的方式&#xff0c;但它们在用途和功能上有着明显的区别。 字段 字段通常用来存储类或结构的状态信息。字段是类的数据成员&…...

微软正式发布Copilot for Security

微软公司近日宣布&#xff0c;其备受期待的安全自动化解决方案——Copilot for Security现已全面上市&#xff0c;面向全球用户开放。这一创新工具的推出标志着微软在提升企业安全防护能力方面迈出了重要一步&#xff0c;同时也为安全专业人士提供了强大的支持。 Copilot for …...

AI大模型日报#0416:李飞飞《2024年人工智能指数报告》、Sora加入Adobe、李彦宏聊百度大模型之路

​导读&#xff1a; 欢迎阅读《AI大模型日报》&#xff0c;内容基于Python爬虫和LLM自动生成。目前采用“文心一言”生成了每条资讯的摘要。标题: 刚刚&#xff0c;李飞飞团队发布《2024年人工智能指数报告》&#xff1a;10大趋势&#xff0c;揭示AI大模型的“喜”与“忧” 摘…...

OpenCV轻松入门(八)——图片卷积

对图像和滤波矩阵进行逐个元素相乘再求和的操作就相当于将一个二维的函数移动到另一个二维函数的所有位置&#xff0c;这个操作就叫卷积。 卷积需要4个嵌套循环&#xff0c;所以它并不快&#xff0c;除非我们使用很小的卷积核。这里一般使用3x3或者5x5 图像滤波 图像滤波是尽…...

鸿蒙HarmonyOS开发规范-完善中

代码规范 所有文件&#xff0c;包括自动生成的编译文件package.json都要格式化&#xff08;IDE快捷键CtrlAltL&#xff09;&#xff1b;函数命名&#xff0c;C大驼峰&#xff0c;TS、JS小驼峰&#xff0c;函数命名注意动宾结构&#xff1b;静态常量需使用全大写&#xff0c;文…...

神经网络压缩图像

简介 典型的压缩管道由四个组件组成&#xff1a; 编码&#xff1a;输入图像 x x x通过编码器函数 ε \varepsilon ε&#xff0c;将其转换为潜在表示 z z z。 量化&#xff1a;截断 z z z以丢弃一些不重要的信息 熵编码&#xff1a;使用某种形式的熵编码&#xff08;例如&…...

Catagory(rt)

继承(IMP融合):支持super命令码;继承推荐重写 分类(IMP替换):不支持super命令码;分类推荐组合 //替换(原来没了/破坏掉原来IMP/分类(替换特性)) 情况1: 自封装(组件化)开源库>分类推荐组合 情况2:逆向分析> 有意替换>分类IMP替换 #import "CatagoryViewContro…...

Games104 现代游戏引擎3

Sprite Animation 序列帧动画 自由度&#xff08;degrees of freedom&#xff0c;DoF&#xff09;对于刚体而言描述它的运动需要3个位移3个旋转&#xff0c;一共6个自由度 顶点动画&#xff08;per-vertex animation&#xff09;利用网格的顶点来控制运动。此时网格上的每个顶…...

【云计算】混合云分类

《混合云》系列&#xff0c;共包含以下 3 篇文章&#xff1a; 【云计算】混合云概述【云计算】混合云分类【云计算】混合云组成、应用场景、风险挑战 &#x1f60a; 如果您觉得这篇文章有用 ✔️ 的话&#xff0c;请给博主一个一键三连 &#x1f680;&#x1f680;&#x1f68…...

探索分布式系统监控zabbix------------自动发现与自动注册

目录 一、部署 zabbix 服务端 二、部署 zabbix 客户端 2.1环境准备 2.2服务端和客户端都配置时间同步 &#xff08;ntp&#xff09; 2.2.1服务端zbx-server 2.2.2服务端zabbix-agent01客户端 2.3客户端配置时区&#xff0c;与服务器保持一致 2.4设置 zabbix 的下载源&…...

权限管理Ranger详解

文章目录 一、Ranger概述与安装1、Ranger概述1.1 Ranger介绍1.2 Ranger的目标1.3 Ranger支持的框架1.4 Ranger的架构1.5 Ranger的工作原理 2、Ranger安装2.1 创建系统用户和Kerberos主体2.2 数据库环境准备2.3 安装RangerAdmin2.4 启动RangerAdmin 二、Ranger简单使用1、安装 R…...

WPF Extended.Wpf.Toolkit 加载界面

1、NuGet 中安装 Extended.Wpf.Toolkit 。 2、在MainWindow.xaml中添加xmlns:tk"http://schemas.xceed.com/wpf/xaml/toolkit" 。 MainWindow.xaml 代码如下。 <Window x:Class"WPF_Extended_Wpf_Toolkit_Loading.MainWindow" xmlns"ht…...

【切换网络连接后】VMware虚拟机网络配置【局域网通信】

初次安装Linux虚拟机以及切换网络都需要配置虚拟机网络&#xff0c; 从而使得win主机内通过远程连接工具能够连接该虚拟机&#xff0c; 而不是在虚拟机内操作。 本片文章你将了解到网络切换后如何配置虚拟机网络的一些基础操作&#xff0c;以及局域网通信的一些基础知识。 …...

风雨同舟网站建设/腾讯中国联通

CDN的全称是Content Delivery Network&#xff0c;即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节&#xff0c;使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络&#x…...

粒子特效网站/网站建设与管理是干什么的

1、压缩命令&#xff1a; 命令格式&#xff1a;tar -zcvf 压缩文件名 .tar.gz 被压缩文件名 可先切换到当前目录下&#xff0c;压缩文件名和被压缩文件名都可加入路径。 2、解压缩命令&#xff1a; 命令格式&#xff1a; tar -zxvf 压缩文件名.tar.gz 解压缩后的文件只能放…...

wordpress 访问密码/长沙关键词优化服务

遇到一个这样的问题在hibernate应用时&#xff0c;Qurey对象qurey Query query ses.createQuery(HQL); query.setDate("endTime",new Date()); 这个时候的new Date()被截去了时分秒 解决办法 Query query ses.createQuery(HQL); query.setTimestamp("endT…...

做网站时如何将前端连接到后台/北京网络营销招聘

软件包下载地址&#xff1a;http://www.joomlachina.org.cn/ 官网上面有很多版本这里以Joomla_3.9.5-Stable-Full_Package.tar.gz版本为例&#xff0c;汉语语言包为zh-CN_joomla_lang_full_3.9.5v1.zip mysql版本为5.7&#xff0c;php版本为7.1 安装YUM源: PHP wget https://mi…...

国家住房和城乡建设部网站查询/营销策划方案内容

安装解压文件make下查看是否安装gcc编译工具修改redis下redis.conf文件 GENERAL daemonize no改为yes在cd /usr/local/redis目录下 ps -ef|grep redis 查看服务是否启动进入usr/local/bin下启动服务:redis-server /redis/redis.confredis-cli -p 6379ping 说明启动成功shutdown…...

电商网站开发设计方案有哪些/线下推广都有什么方式

其实异步网络通信的实质与mfc中的消息机制非常相似。 首先&#xff0c;对于服务器来说&#xff0c;需要先创建一个派生自CAsynSocket类&#xff0c;由于在服务端&#xff0c;必须先创建套接字&#xff0c;并且把这个套接字与窗口进行映射。CMySocket sock;sock.SetParent(this)…...