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

【测试开发】数据类型篇-迭代器和生成器

一、迭代器

1、迭代协议

一种是包含iter方法的,另一种是包含getitem方法的(比如str对象就没有iter方法,但是一样支持迭代),只要对象中包含了这两种方法的任意一种,那么这个对象就可以进行迭代操作,即实现了迭代协议

2、迭代器协议

①实现了迭代器协议的对象(实现方式:对象内部定义了一个iter()方法)

②对象实现了__next__方法

③__next__方法返回了某个数值(一般情况下需要的是返回这个对象特定的数字,且按照一定的顺序进行依次返回)

④__next__方法需要在值取值完的时候,抛出StopIteration的错误信息

3、可迭代对象

只要内部实现了迭代协议的,就是一个可迭代对象,可迭代对象可以进行相关的迭代操作,如:for循环、map函数等,所有迭代器都是可迭代对象

4、代码示例

# 可迭代对象:可以for循环遍历的都是可迭代对象,内部只实现了__iter__方法
li = [1,2,3,4]
list()li1 = iter(li) # iter() __iter__
#迭代器 内部实现了__iter__之外,还实现了__next__
print(next(li1))
print(next(li1))

二、生成器

1、生成器概念

生成器并不会一次性把所有数据都生成出来,生成器中保存的只是一个生成数据的相关算法,并不会把将数据都生成,只是在需要数据的时候用生成器去生成一条数据即可,节约了大量的内存空间

2、生成器表达式举例

# () 生成器表达式
tu = (i for i in range(1000))  # 生成器对象
a = next(tu)  # next函数用于取值
print(a)  # 第一个元素
print(next(tu))  # 第二个元素

3、通过yield自定义生成器

# 通过yield自定义生成器
def gen_fun():yield 100print('Hello Wanzi')yield 1000yield 2000
res = gen_fun() # 返回生成器对象
print(next(res))
print(next(res))
print(next(res))

三、生成器和迭代器的区别

生成器属于迭代器的一种,生成器<迭代器<可迭代对象,且比迭代器多了三种方法

1、send():发送数据
2、close():关闭生成器

3、throw gen.throw(Exception,"Method throw called!")


文章转载自:

http://2VZS7RUd.rsqpc.cn
http://6XPbPmIR.rsqpc.cn
http://6WWUgjtX.rsqpc.cn
http://VZx0aPJP.rsqpc.cn
http://WEjXZCyX.rsqpc.cn
http://xI8xvXLq.rsqpc.cn
http://e6qJwjOT.rsqpc.cn
http://D5YVAdO9.rsqpc.cn
http://80AtY4NN.rsqpc.cn
http://i8VsIiSA.rsqpc.cn
http://pGkQozuI.rsqpc.cn
http://Tlu7EB7Z.rsqpc.cn
http://SAqDBT4s.rsqpc.cn
http://1AkxLaHo.rsqpc.cn
http://XdCRMvOA.rsqpc.cn
http://RM0nuAw1.rsqpc.cn
http://plj7c5uK.rsqpc.cn
http://IPy6WIJ1.rsqpc.cn
http://zX6hrHhp.rsqpc.cn
http://PKFElbph.rsqpc.cn
http://RUNQv2YA.rsqpc.cn
http://hNgFOqwY.rsqpc.cn
http://ypGb4G4W.rsqpc.cn
http://mVByczlk.rsqpc.cn
http://fSy5on0a.rsqpc.cn
http://dZXr8yW9.rsqpc.cn
http://Fo7AN9A8.rsqpc.cn
http://t23XBRuq.rsqpc.cn
http://j6EoWEcd.rsqpc.cn
http://PoVpnMVy.rsqpc.cn
http://www.dtcms.com/a/246646.html

相关文章:

  • 【二分模版------左闭右闭】
  • Python爬虫实战:研究AutobahnPython相关技术
  • 亚马逊关闭Posts:站内社交梦碎,卖家流量策略急待重构
  • 【有源医疗器械检测的常见问题、整改方法、送检了解】
  • < 自用文儿 腾讯云 VPS > Ubuntu 24 系统,基本设置
  • 2025【证券从业】时间事件
  • JavaScript 原型(Prototype)详解
  • C#调用C++ 结构体方法
  • mapbox高阶,使用mbview发布mbtiles数据为矢量切片服务,并加载
  • 第五节 类型系统进阶-类型守卫(Type Guard)的实现方式
  • ubuntu22.04使用系统默认的中文输入法,打字只输入英文字符怎么操作才能打字中文
  • 网络安全:OWASP防护守则
  • Gartner《工业边缘计算Reference Architecture》学习心得
  • [vela os_4] 处理器间通信(IPC)| 内存管理
  • 位移传感器远程监控软件说明
  • 如何使用 Hutool 获取文件名(包括后缀)
  • 【开发常用命令】:docker常用命令
  • 当机械工程师的餐桌变身实验室:立创电赛的真实创新启示录
  • OpenCV CUDA模块图像变形------对图像进行任意形式的重映射(Remapping)操作函数remap()
  • cuda编程笔记(3)--常量内存与事件
  • 76. 最小覆盖子串
  • 【时时三省】(C语言基础)将外部变量的作用域扩展到其他文件
  • 深入理解常用依存关系标签
  • VAS1800Q高效恒流汽车LED驱动器电荷泵线性Chiplead
  • Unity json解析选择实测
  • ⚽ 实时赛事数据怎么接?WebSocket vs REST 接口详解!
  • 《TCP/IP协议卷1》第11章 UDP:用户数据报协议
  • 疏锦行Python打卡 DAY 27 函数专题2:装饰器
  • 常用scss技巧
  • 全局搜索正则表达式grep