迭代器

python之路——迭代器与生成器

落花浮王杯 提交于 2019-12-29 17:59:18
要了解for循环是怎么回事儿,咱们还是要从代码的角度出发。 首先,我们对一个列表进行for循环。 for i in [1,2,3,4]: print(i) 上面这段代码肯定是没有问题的,但是我们换一种情况,来循环一个数字1234试试 for i in 1234 print(i) 结果: Traceback (most recent call last): File "test.py", line 4, in <module> for i in 1234: TypeError: 'int' object is not iterable iterable:是可迭代的意思。 首先,我们从报错来分析,好像之所以1234不可以for循环,是因为它不可迭代。那么如果“可迭代”,就应该可以被for循环了。 这个我们知道呀, 字符串、列表、元组、字典、集合 都可以被for循环,说明他们 都是可迭代的 。 我们怎么来证明这一点呢? from collections import Iterable l = [1,2,3,4] t = (1,2,3,4) d = {1:2,3:4} s = {1,2,3,4} print(isinstance(l,Iterable)) print(isinstance(t,Iterable)) print(isinstance(d,Iterable)) print

STL 容器中end()含义

懵懂的女人 提交于 2019-12-29 16:05:48
容器的end()方法,返回一个迭代器,需要注意:这个迭代器不指向实际的元素,而是表示末端元素的下一个元素,这个迭代器起一个哨兵的作用,表示已经处理完所有的元素。 因此,在查找的时候,返回的迭代器,不等于end(),说明找到了目标。等于end(),说明检查了所有元素,没有找到目标。 来源: CSDN 作者: Tony_Xian 链接: https://blog.csdn.net/boiled_water123/article/details/103752965

Java的Iterator迭代器补充,增强for循环,泛型,List接口,set接口

醉酒当歌 提交于 2019-12-29 14:47:54
1、Iterator迭代器: (1)类型转换异常: ClassCastException ;集合中存放的是多个对象时,在强转时会出现; package com.oracle.demo01; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class demo01 { public static void main(String[] args) { method03(); }public static void method03(){ Collection col = new ArrayList(); col.add("123"); col.add(123); Iterator it = col.iterator(); while(it.hasNext()){ if(it.next() instanceof String){ //这里的两个it.next()不是一个 String s = (String)it.next(); System.out.println(s); } } } } 会出现以下异常: (2)添加泛型避免异常;在编译时期出现编译失败; 与上面对比: package com.oracle.demo01; import java.util

02函数整合篇

只谈情不闲聊 提交于 2019-12-28 13:14:36
目录 前言 函数 函数的简介 函数的结构与调用 函数的返回值 函数的参数 万能参数,仅限关键字参数 *的魔性用法。 名称空间作用域 高阶函数 内置函数 globals locals global nonlocal关键字 函数名的应用 默认参数的坑 可迭代对象和迭代器 while模拟for循环 可迭代对象与迭代器的对比 可迭代对象与迭代器的对比 生成器 yield from 出错题 生成器表达式,列表推导式,字典推导式 匿名函数 小练习 内置函数 内置函数 I 了解 callable 判断是否可调用 bin oct hex进制转换 all any判断是否全部为真或假 内置函数II 重要 sep 设定分隔符。 end去除默认换行 sum() 数字相加求和 min max()可以加功能 reversed() 将一个序列翻转 sorted排序函数 可以加key map对元素进行映射 zip() 拉链方法 filter筛选过滤 返回迭代器 闭包 装饰器 标准版的装饰器; 带参数的装饰器 多个装饰器装饰一个函数 递归 前言 本篇博客整合了以下与函数有关的知识点 函数 函数的简介 # 函数:以功能(完成一件事)为导向,登录,注册,len,一个函数就是一个功能。 随调随用。 # 减少代码的重复性。 # 增强了代码的可读性。 函数的结构与调用 定义一个函数 def len_num(a):

C++之迭代器失效及解决

喜你入骨 提交于 2019-12-28 05:21:57
C++之迭代器失效及解决 描述 基于CStringList来实现数据插入删除 实现逻辑描述 代码实现 崩溃界面显示 分析 基于链表式容器List来实现数据存储 代码实现 崩溃问题描述 错误分析 网上关于错误描述: 关于迭代器失效总结 解决方案: 网络资料参考 描述 在霍尼韦尔门禁项目中,通过遍寻霍尼韦尔设备获取设备信息后,GotMessage会不断收到消息,并把消息数据添加到容器里面。在回调函数线程中,循环获取容器数组中的数据进行处理,并需要删除尾部数据。存储数据的容器的实现,需要考虑到频繁的插入和删除数据。 综合来说,CStringList和链表式容器List是最好的实现方式,但频繁的插入和删除数据,会造成迭代器失效的问题。 基于CStringList来实现数据插入删除 实现逻辑描述 采用CStringList来实现频繁的数据插入和删除操作。从头部插入数据,从尾部删除数据。 代码实现 //1、定义类变量 CStringList m_szListInput ; //2、初始化; m_szListInput . RemoveAll ( ) ; //3、CStringList从头部添加数据元素。 //(遍历所有霍尼韦尔设备后,GotMessage会不断收到消息,并把消息数据添加到CStringList变量里面) m_szListInput . AddHead ( CString (

设计模式之迭代器模式

不羁的心 提交于 2019-12-28 03:24:07
迭代器模式定义 迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。 Java 开发过程中遍历是常用的。如下边程序 for ( int i = 0 ; i < arr . length ; i ++ ) { System . out . println ( arr [ i ] ) ; } for语句中i++每次循环自增1,迭代到下一元素。将循环变量的作用抽象化,通用化后形成的模式,在设计模式中成为Iterator模式。 实现场景 将书(Book)放到书架(BookShelf)中,并将书名按顺序显示 UMl 名字 说明 Aggregate 标识集合的接口 Iterator 遍历集合的接口 Book 表示书的类 BookShelf 表示书架的类 BookShelfIterator 遍历书架的类 Main 测试类 程序示例 Aggregate 接口 所要便利的集合的接口。实现了该接口的类将成为一个可以保存多个元素的集合,类似数组。 public interface Aggregate { public abstract Iterator iterator ( ) ; } Aggregate接口中声明的方法为iterator,作用为生成一个用于遍历的迭代器。 Iterator 接口 作用为遍历集合中元素,相当于循环语句中的循环变量

Python迭代器

妖精的绣舞 提交于 2019-12-28 01:19:39
一.迭代器   迭代器指的是迭代取值的工具,迭代是指一个重复的过程,每一次重复都是基于上一次结果而来   迭代提供了一种通用的不依赖索引的迭代取值方式   一.可迭代对象     但凡内置有__iter__方法的对象,都称为可迭代对象,可迭代的对象:str,list,tuple,dict,set,文件对象   二.迭代器对象     1既内置又__next__方法的对象,执行该方法可以不依赖索引取值     2.又内置有__iter__方法的对象,执行迭代器的__iter__方法得到的依然是迭代器本身     迭代器一定是可迭代对象,可迭代对象不一定是迭代器对象,文件对象本身就是一个迭代器对象   例如:执行可迭代对象下的__iter__方法,返回一个迭代器对象,在通过迭代器对象的__next__方法取值,如果取值次数超过源值的数量就会报错        执行结果:        for循环本质为迭代器循环   工作原理:     1.先调用in后对象的__iter__方法,将其变成一个迭代器对象     2.调用next(迭代器),将得到的返回值赋值给变量名     3.循环往复直到next(迭代器)抛出异常,for会自动捕捉异常然后结束循环   ps:可以从for的角度,分辨但凡可以被for循环取值的对象就是可迭代对象   迭代器优点:     1

迭代器/生成器

≡放荡痞女 提交于 2019-12-28 01:18:45
迭代器 #1.什么是迭代器 迭代取值的工具 #2.为什么用迭代器 优点: 1、提供一种不依赖索引的取值方式 2、更节省内存(自定义迭代器是,它所占的内存是功能本身的代码量,) 缺点: 1、没有按索引取值灵活 2、迭代器对象是一次性的,值可以取完,再想取值重新把可迭代对象定义为迭代器对象        #3. 如何用迭代器   可迭代的对象:  str\list\tuple\dict\set\文件对象 但凡内置有__iter__方法的对象都称之为可迭代对象    可迭代对象).__iter__=====》》迭代器对象   迭代器对象:   文件对象     既内置有__iter__方法又内置有__next__方法的对象都称之为迭代器对象   __iter__与__next__简便写法 k={'a':111,'b':222,'c':333} iter_k=iter(k) # k.__iter__() print(next(iter(k))) #iter_d.__next__()    4.for循环的底层工作原理(必须是可迭代类型)    1  把可迭代对象转换为迭代器对象,    2  调迭代器的__next__方法,取值,取值    3  用try和except监测异常,在把迭代器中值取完的情况下结束循环 方式一方式二是一个引子 方式一 k={'a':111,'b':222,'c'

可迭代对象、迭代器与生成器

拜拜、爱过 提交于 2019-12-28 01:17:18
迭代器 什么是迭代器 迭代指的是一个重复的过程,且不是单纯的重复,每次重复都基于上次的结果。 迭代器指的是迭代取值的工具,该工具的特点是可以不依赖于索引取值。 为什么用迭代器 为了找出一种通用的&可以不依赖于索引的迭代取值方式。 如何用迭代器 可迭代的对象:但凡内置有__iter__方法得当对象都称之为可迭代的对象 迭代器对象:既内置有__iter__,又内置__next__方法 关于__iter__方法: 调用可迭代对象的__iter__会得到一个迭代器对象 调用迭代器对象的__iter__会得到迭代器本身 迭代器的优缺点 有点 提供了一种通用的&可以不依赖于索引的迭代取值方式 同一时刻在内存中只有一个值,更加节省内存 缺点 取指定值时不如索引灵活,并且迭代器是一次性的,只能往前取值 无法预知迭代器数据的个数 可迭代的对象 str、list、tuple、dict、set、文件对象 迭代器对象 文件对象是python定义好的迭代器对象 可迭代对象如何转化为迭代器对象 调用可迭代对象内置的__iter__方法会得到一个返回值,该返回值就是对应的迭代器对象 for循环 for循环准确的说应该是迭代器循环,原理如下: 先调用in后面可迭代对象的__iter__方法,得到迭代器对象 执行迭代器的__next__方法得到一个返回值,赋值给每次循环的变量,运行循环体代码 循环往复

迭代器,生成器

↘锁芯ラ 提交于 2019-12-28 01:15:45
一,迭代的概念   迭代器是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下次一迭代的初始值 while True: #只是单纯地重复,因而不是迭代 print('===>') l=[1,2,3] count=0 while count < len(l): #迭代 print(l[count]) count+=1 二,为什么要用迭代器   迭代器:     优点: 1),提供一种不依赖索引的迭代取值方式        2),更加节省内存     缺点: 1),不如按照索引取值的方式灵活        2),取值一次性的,只能往后取值,无法预测值的个数 三,如何使用迭代器   可迭代的对象:str\ list\ tuple \dict \set \文件对象     但凡内置有_iter_方法的对象都称之为可迭代对象   迭代器对象: 文件对象     既可以内置_iter_方法又可以内置_next_方法的对象都称之为迭代器对象 调用可迭代对象_iter_ 方法,会有一个返回值,该返回值就是内置的迭代器对象 d = {'k1': 111, 'k2': 222, 'k3': 333} iter_d = d.__iter__() #将数据类型可迭代对象转变成迭代器对象 print(iter_d) try: #让报错继续运行 print(iter_d.__next__())