迭代器

Posted 风之岚翔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迭代器相关的知识,希望对你有一定的参考价值。

概念

我们已经知道,可以直接作用于for 循环的数据类型有一下几种:
1、一类是集合数据类型,如list、tuple、dict、set、str等;
2、一类是generator(生成器),包括生成器和带yield的generator funcation;
(带yield的函数生成器和列表生成器)
 
这些可以直接作用于for循环的对象统称为可迭代对象:Iterable。
可以使用isinstance()判断一个对象是否是Iterable对象:
 
 

创建迭代器对象的方法

一、iter()函数获得一个Iterator对象。
list、tuple、dict、set、str等数据类型可以用iter()函数转换成迭代器
例如:
技术分享图片
 1 1、正常循环一个序列:
 2 for i in [1,2,3,4,5,6,7,8,9]
 3    pass
 4     .....
 5 
 6 2、用迭代器循环一个序列:
 7 #首先获得Iterator对象:
 8 it = iter([1,2,3,4,5])
 9 
10 #循环对象:
11 while True:
12     try:
13         #获得下一个值:
14         x = next(it)
15     except  StopIteration:
16         #遇到StopIteration就退出循环:
17         break
18 
19 
20 #注意:上下两个完全等价
列表循环

 

二、跌倒器就是可以迭代的对象。
技术分享图片
 1 def myrange(arg):
 2     start = 0
 3     while True:
 4         if start > arg:
 5             return
 6         yield  start
 7         start += 1
 8 ret = myrange(3)
 9 r = ret.__next__()  #进入函数,找到yield,获取yield后面的数据,每运行一次,生成器就会往下执行一个数值:
10 print(r)
11 r = ret.__next__()
12 print(r)
13 r = ret.__next__()
14 print(r)
15 r = ret.__next__()
16 print(r)
迭代器实例

 

三、用途:
socket的时候会用到,但是代码复杂性增加
迭代器就类似于概念性的一个知识点
迭代器就是由__next__可以一个一个提取的,类似于for循环的,逐步取值的,就叫做迭代器。
例如
1、一个列表,然后用for进行遍币,其实就是执行了r = ret.__next__();
2、当迭代到最后一个值时,按理说取完后会报错的,但是由于封装到foread

 

 

 

 
 
 
 
 

以上是关于迭代器的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段6——CSS选择器

行历史查看器 - Git

持久片段和查看器

损坏的顶点和片段着色器

python使用上下文对代码片段进行计时,非装饰器

设计模式迭代器模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )