迭代器和生成器

news2024/11/17 22:18:12

文章目录

        • 迭代器和生成器
          • 图解迭代器和生成器的关系
          • 迭代器
            • 容器
          • 生成器
            • yield函数
            • 生成器表达式
        • 总结

迭代器和生成器

图解迭代器和生成器的关系

在这里插入图片描述

图1-1

​ 不管是生成器还是我们的容器,最终都是迭代器,使用next方法进行有规律的获取元素,不需要将元素都加载到内存进而节省资源利用

迭代器
容器

​ 容器(container)是把多种元素放在一起的数据格式,比如我们的列表、字典、字符串等。我们可以使用for循环进行元素的逐个获取,也可以使用in或者not in判断元素是否存在在我们的容器中。但是这并不是容器本身的能力,而是可迭代对象(iterable)赋予了它这一项能力,简而言之也就是我们的列表、字典等数据都是典型的可迭代对象

​ 以字典为例进行说明:

在这里插入图片描述

a ={"key1":"value1","key2":"value2"}
b= iter(a)
print (b)
print (next(b))
print (next(b))
###################################
C:\Users\abcdefg.py 
<dict_keyiterator object at 0x000001F10EF89CC0>
key1
key2
"""
1、使用iter()方法将容器(字典数据类型也可叫做可迭代对象)生成迭代器
2、使用next()方法获取迭代器中的值
"""

​ 其中迭代器和容器(字典或者列表以及字符串)的区别在于,构建迭代器1不会把所有的元素都加载到内存中而是以延时计算(lazy evaluate)方式返回元素,这正是它的优点。

生成器

​ 生成器我们一般使用yield函数,在函数被调用时就会返回生成器对象,从图1-1我们可以看出生成器最终也是一种迭代器只是相对比较特殊而已

yield函数

​ 直接实例说明:

def test(a):
    print ("开始")
    a=1
    while a<=3:
        a+=1
        yield \
        a
        print ("结束")
a = test(1)
print (a)
print (next(a))
print ("*"*20)
print (next(a))
##################################
C:\Users\x-149\abcdefg.py 
<generator object test at 0x0000015F85D36970>
开始
2
********************
结束
3
"""
1、function 调用遇到yield后
	1、返回一个a也就是yield相当于return
	2、generator生成器
2、使用next()方法会继续yield后的语句执行
	1、print方法打印内容
	2、while循环进行a+1然后return
"""
生成器表达式

​ 生成器表达式看起来像列表推导式,但是它返回的是一个生成器而不是列表对象

x =(x*x for x in range(1,3))
print (x)
print (next(x))
print ("x"*10)
print (next(x))
#######################
C:/Users/x-149/abcdefg.py 
<generator object <genexpr> at 0x0000019FC8856C80>
1
xxxxxxxxxx
4
"""
1、使用表达式的形式生成器
2、使用next方法获取值
"""

总结

​ 不管迭代器还是生成器,只是节省内存使用的方式,实际工作中一般不考虑这种情况,但是面试会被问到


  1. 若需要编写迭代器可参考:https://blog.csdn.net/weixin_45336222/article/details/128002893 ↩︎

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

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

相关文章

免费的在线3D CAD【BimAnt】

BimAnt托管了可以免费使用的在线三维CAD&#xff0c;采用BRep内核&#xff0c;支持几何约束求解&#xff0c;支持二维草图&#xff0c;支持挤压、放样、扫掠和旋转等操作。访问地址&#xff1a;BimAnt三维CAD。 一、添加基础图元 BimAnt三维CAD支持圆柱、圆锥、球体、圆环体…

STM32的最小系统组成的详解

经常使用STM32开发的工程师对于它的开发环境的最小系统是必须要有所了解的&#xff0c;特别是硬件工程师在设计硬件的时候对这个最小系统就要更加的深入了解了&#xff0c;如果最小系统的搭建都有问题&#xff0c;那以后的使用很难避免不出现问题。 话不多说&#xff0c;进入正…

【自省】使用Executors.xxx违反阿里Java代码规范,那还不写定时任务了?

一、背景 在《分布式锁主动续期的入门级实现-自省 | 简约而不简单》中通过【自省】的方式讨论了关于分布式锁自动续期功能的入门级实现方式&#xff0c;简单同步一下上下文&#xff1a; 客户端抢到分布式锁之后开始执行任务&#xff0c;执行完毕后再释放分布式锁。持锁后因客…

微服务守护神-Sentinel-热点-授权-系统规则

引言 书接上篇 微服务守护神-Sentinel-降级规则 &#xff0c;上面介绍了Sentinel降级规则&#xff0c;本篇继续来Sentinel的热点、授权、系统规则。 热点规则 何为热点&#xff1f;热点即经常访问的数据。很多时候我们希望统计某些热点数据中访问频次最高的 Top K 数据&…

# String-security(配置异常处理器,封装JWT工具类)

1 JWT是做什么的? 为了在前后端分离项目中使用 JWT &#xff0c;我们需要达到 2 个目标&#xff1a; 在用户登录认证成功后&#xff0c;需要返回一个含有 JWT token 的 json 串。 在用户发起的请求中&#xff0c;如果携带了正确合法的 JWT token &#xff0c;后台需要放行&a…

ELK日志分析系统

目录 一.ELK概述 1.1 ELK简介 1.2 ELK日志组件 1.2.1 ELK组件介绍 1.3 日志处理步骤 二. Elasticsearch 集群部署 2.1 关闭防火墙 ​2.2 ELK Elasticsearch 集群部署&#xff08;在Node1&#xff0c;Node2节点上操作&#xff09; ​ 2.2.1 更改主机名​ 2.2.2 配置域名…

RCE漏洞简介

今天继续给大家介绍渗透测试相关知识&#xff0c;本文主要内容是RCE漏洞简介。 免责声明&#xff1a; 本文所介绍的内容仅做学习交流使用&#xff0c;严禁利用文中技术进行非法行为&#xff0c;否则造成一切严重后果自负&#xff01; 再次强调&#xff1a;严禁对未授权设备进行…

高级篇之如何升级5GCPE固件

高级篇之如何升级5GCPE固件1. 准备工作2. 安装5GCPE串口驱动3. 升级固件3.1 选择固件3.2 选择串口号3.3 下载固件3.4 下载固件意外情况4. 重新启动结束&#xff01;LINKPI-5GCPE是LINKPI推出的可以做户外移动直播的 5G无线网关&#xff0c;可以支持三种模式&#xff1a; 网卡模…

计算机网络-分组交换与电路交换

有志者&#xff0c;事竟成 文章持续更新&#xff0c;可以关注【小奇JAVA面试】第一时间阅读&#xff0c;回复【资料】获取福利&#xff0c;回复【项目】获取项目源码&#xff0c;回复【简历模板】获取简历模板&#xff0c;回复【学习路线图】获取学习路线图。 文章目录一、分组…

普乐蛙VR航天科技馆太空体验馆VR太空舱体验馆vr飞碟遨游太空

什么是航天航空主题馆 普乐蛙VR航天航空体验馆系列 普乐蛙VR航天航空主题馆可以根据客户的需求&#xff0c;用航天航空的科技氛围方案进行布置&#xff0c;大多用最新的黑科技&#xff0c;让整个馆充满科技科幻的感觉&#xff0c;使人沉浸&#xff0c;容易进入主题。馆内设置不…

MySQL函数:列转行CONCAT、CONCAT_WS、GROUP_CONCAT的使用(精要)

前言 很久没有接触Mysql了。 今天心血来潮&#xff0c;突然想了解一下Mysql列转行&#xff0c;看了一些文章&#xff0c;重点不清晰&#xff0c;遂有下文&#xff01; Mysql官网、 社区版下载&#xff08; Windows版_mysql.8.0.31下载 &#xff09; 概述 Mysql内部提供了列转…

UNIAPP实战项目笔记50 登录和注册页面的布局

UNIAPP实战项目笔记50 登录和注册页面的布局 实际案例图片 登录页面布局 注册页面布局 显示登录和注册页面布局 页面布局的切换 具体内容图片自己替换哈&#xff0c;随便找了个图片的做示例 具体位置见目录结构 完善布局页面和样式 代码 login.vue部分 <template><v…

拉线援(AD PADS Cadence快捷键汇总)

年纪越大&#xff0c;记性就不太好了&#xff0c; 要干的活越多&#xff0c; 还要盯盘&#xff0c; 效率得提升一下。 总结下平时拉线容易用到的快捷键、评审资料等。 以后不断更新完善。 公众号发消息&#xff08;Download|拉线援&#xff09;可获得源文档。 一、Altium Desi…

水文气象站远程监测物联网系统,彰显水利治理智慧

我国在几千年的历史中都对水利设施建设十分重视&#xff0c;修建了各种类型的水利设施&#xff0c;在古代的生活、农业生产、防洪排水、漕运等多个方面发挥着非常重要的作用&#xff0c;如都江堰、郑国渠、坎儿井等设施更是青史留名。 到了现代&#xff0c;水资源治理依旧是民生…

开源SCRM营销平台-MarketGo产品介绍(二)

1、MarketGo概述 MarketGo中国式营销自动化开源项目标杆。 MarketGo更像是一个 SDK 、引擎&#xff0c;通过提供的标准化功能和基础能力&#xff0c;让开发者能快速搭建一个营销自动化系统&#xff0c;快速完成从0-1的过程&#xff0c;并且能基于开放的能力和源码&#xff0c…

爱了、阿里巴巴 JAVA 岗发布,最新内部面试题(含 P5-P7)

不少人对阿里巴巴技术岗的体系结构及级别的技术要求设置不太清楚&#xff0c;想去面试心里没底&#xff0c;下面简单介绍一下阿里 P5-P7 技术岗要求体系以及为大家分享一份涵盖阿里巴巴 P5-P7 的完整面试题&#xff01; 阿里 P5(高级研发工程师) 工作要求&#xff1a; 能独立…

容器的常用方法和线程安全(Map、List、Queue)

一、Map 1. HashTable 线程安全的Map&#xff0c;用synchronized锁 2. Collections.synchronizedMap Collections.synchronizedMap(new HashMap()) 可以把HashMap变成线程安全的&#xff0c;锁粒度比HashTable稍微小一点 3. ConcurrentHashMap ConcurrentHashMap主要提高…

【C++】STL - vector使用和模拟实现

&#x1f431;作者&#xff1a;傻响 &#x1f431;专栏&#xff1a;《C/C - STL》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; ​ 目录 No.1.vector的介绍及使用 1.1 vector的介绍 1.2 vector的接口 vector的构造函数接口 vector的…

最近很火的电视剧《点燃我,温暖你》男主角学神和女主角课代表计算机考试实现的跳动的爱心,全程用代码复原真实的实现

最近很火的电视剧《点燃我&#xff0c;温暖你》男主角学神和女主角课代表计算机考试实现的跳动的爱心&#xff0c;全程用代码复原真实的实现。 学神考试100分&#xff0c;只是因为试卷只有100分&#xff01; 该剧改编自作家Twentine创作的小说《打火机与公主裙》&#xff0c;讲…

微服务框架 SpringCloud微服务架构 微服务保护 31 限流规则 31.5 流控效果【排队等待】

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 微服务保护 文章目录微服务框架微服务保护31 限流规则31.5 流控效果【排队等待】31.5.1 流控效果【排队等待】31.5.2 案例31.5.3 总结31 限流…