day14 迭代器,生成器,函数的递归调用
1.什么是迭代器
迭代是一个重复的过程,但是每次重复都是基于上一次重复的结果而继续
迭代取值的工具
2.为什么要用迭代器
迭代器的优点
①不依赖于索引取值
②更节省内存
缺点:
1.不如按照索引取值方式灵活
2.取值一次性的,只能往后取,无法预测值的个数
3.为何要用迭代器:
可迭代对象:但凡内置有__iter__方法的对象
iterable :str\list\tuple\dic\set\文件
迭代器对象
iterator
即内置有__iter__,又有__next__方法的
文件即是可迭代对象又是迭代器对象
调用可迭代器对象下的__iter__方法,会有一个返回值,生成内置的迭代器对象
for循环的底层原理:
1.调用in后面的那个值/对象的__iter__方法,拿到一个迭代器对象iter_obj
2.调用迭代器对象iter_obj.__next__()将得到的返回值赋值给变量名k,循环往复直到取值完毕抛出异常StopIter
3.捕捉异常
1.iter(d) = d.__iter__
2.next(iter_d)
如何自定义迭代器
生成器:就是一种自定义迭代器
如何得到生成器
但凡函数内出现yield,再去调用函数不会立即执行代码,会返回一个返回值,该返回值就是一个生成器,当对这个生成器调用next方法时,执行函数内代码,遇到yield暂停,再次调用next方法时,从上次结束的地方,继续运行
yield :
1.提供了一种自定义迭代器的解决方案
2.yield &return
相同点,都可以返回值,返回值没有类型限制\个数限制
不同点,return只能返回一个值,yield可以记录当前状态,下一次执行时,会从上次记录的状态后开始执行
函数的递归调用
函数嵌套调用的一种特殊形式
在调用一个函数的过程直接或者间接调用该函数本身,称之为递归调用
递归必须满足两个条件:
①每进入下一次递归调用,问题的规模都应该有所减少
②递归必须有一个明确的结束条件
递归有两个明确的阶段:
①回溯:一层一层递归调用下去
②递推:向后推
day14 迭代器,生成器,函数的递归调用的更多相关文章
- 你好,C++(27)在一个函数内部调用它自己本身 5.1.5 函数的递归调用
5.1.5 函数的递归调用 在函数调用中,通常我们都是在一个函数中调用另外一个函数,以此来完成其中的某部分功能.例如,我们在main()主函数中调用PowerSum()函数来计算两个数的平方和,而在P ...
- c语言:函数的递归调用
c语言可以将代码模块化,这是其很重要的一个特性. 说道代码模块化,我们很自然的就会联想到函数.而函数中,比较难的一个知识点就是函数的递归调用. 值得注意的是,函数的递归调用在现实工作并不是很常用,但是 ...
- Python(迭代器 生成器 装饰器 递归 斐波那契数列)
1.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大优 ...
- Python 迭代器&生成器,装饰器,递归,算法基础:二分查找、二维数组转换,正则表达式,作业:计算器开发
本节大纲 迭代器&生成器 装饰器 基本装饰器 多参数装饰器 递归 算法基础:二分查找.二维数组转换 正则表达式 常用模块学习 作业:计算器开发 实现加减乘除及拓号优先级解析 用户输入 1 - ...
- python--内置函数、匿名函数、递归调用
匿名函数 有名函数: def func1(x): print(func1) 结果: <function func1 at 0x00000000005C3E18> 匿名函数: func2=l ...
- day14 迭代器 生成器 面向过程思想
"" 迭代器 什么是迭代器(iterator) 器指的某种工具, 迭代指的是更新换代的过程,例如应用程序的版本更新从1.0 变成 1.1 再1.2 迭代的目的是要根据上一个结果,产 ...
- C51函数的递归调用
前几天在写C51程序时用到了递归,简单程序如下: void WRITE_ADD(uchar addr,uchar wbyte) { START(); //先发送起始信号 WRITE_BYTE(0xa0 ...
- [C++程序设计]函数的递归调用
在调用一个函数的过程中又出现直接或间接地调用 该函数本身,称为函数的递归(recursive)调用. 包含递归调用的函数称为递归函数. 在实现递归时,在时间和空间上的开销比较大 求n! #includ ...
- Java中函数的递归调用
说到递归,java中的递归和C语言中也是很相似的,在Java中,递归其实就是利用了栈的先进后出的机制来描述的. public class HelloWorld { public static void ...
随机推荐
- Map集合的四种常用遍历方式整理
1.Map集合简介:map集合是一个key—value型的数据结构,存储的数据具有查询速度快速的特点,但由于是无序的,所以没有顺序可言.在遍历时没有办法像简单的list或数组一样. 2.代码: pac ...
- java数据结构----图
1.图:.在计算机程序设计中,图是最常用的数据结构之一.对于存储一般的数据问题,一般用不到图.但对于某些(特别是一些有趣的问题),图是必不可少的.图是一种与树有些相像的数据结构,从数学意义上来讲,树是 ...
- [JLOI2016]圆的异或并
Description 在平面直角坐标系中给定N个圆.已知这些圆两两没有交点,即两圆的关系只存在相离和包含.求这些圆的异或面积并.异或面积并为:当一片区域在奇数个圆内则计算其面积,当一片区域在偶数个圆 ...
- python学习之列表元组,字典
list:元素性质可以不一致,元素还可以是list,可类似数组方法进行索引(也可以用负数索引,-1表示最后一个),可用.append('')进行动态增加,可用pop()删除最后一个或者pop(i)删除 ...
- JVM-GC日志分析
程序运行时配置如下参数: -Xms20M -Xmx20M -Xmn10M -verbose:gc -XX:+PrintGCDetails -XX:SurvivorRatio= -XX:+PrintGC ...
- linux增加系统监视器的快捷键
系统命令:gnome-system-monitor 可在终端输入调用 在系统相应的快捷键设置区设置即可
- 从零开始利用vue-cli搭建简单音乐网站(二)
1.利用vue-router实现页面跳转 程序可以正常运行之后,下面我们需要配置路由实现页面的局部刷新,这一功能将用来实现网站页面的跳转. 打开程序目录,进入"src\router\inde ...
- Android 验证码倒计时两种方案
使用 第一种方案:自定义控件 1.在布局中使用 <?xml version="1.0" encoding="utf-8"?> <Relativ ...
- 华硕笔记本刷BIOS
笔记本硬件升级后想使用微软的Windows xp mode,之后发现笔记本BIOS中没有虚拟化选项,想通过升级BIOS的方法来解决,结果失败. 升级后出现关机后无法关闭电源指示灯以及风扇的问题,之后只 ...
- 压力测试工具segie的使用
压力测试工具segie的使用 使用文档参考地址:https://www.joedog.org/siege-manual/ siege4地址:http://download.joedog.org/sie ...