1.什么是迭代器

迭代是一个重复的过程,但是每次重复都是基于上一次重复的结果而继续

迭代取值的工具

2.为什么要用迭代器

迭代器的优点

​ ①不依赖于索引取值

​ ②更节省内存

缺点:

​ 1.不如按照索引取值方式灵活

​ 2.取值一次性的,只能往后取,无法预测值的个数

3.为何要用迭代器:

可迭代对象:但凡内置有__iter__方法的对象

iterable :str\list\tuple\dic\set\文件

迭代器对象

iterator

即内置有__iter__,又有__next__方法的

文件即是可迭代对象又是迭代器对象

调用可迭代器对象下的__iter__方法,会有一个返回值,生成内置的迭代器对象

  1. for循环的底层原理:
  2. 1.调用in后面的那个值/对象的__iter__方法,拿到一个迭代器对象iter_obj
  3. 2.调用迭代器对象iter_obj.__next__()将得到的返回值赋值给变量名k,循环往复直到取值完毕抛出异常StopIter
  4. 3.捕捉异常
  1. 1.iter(d) = d.__iter__
  2. 2.next(iter_d)

如何自定义迭代器

生成器:就是一种自定义迭代器

如何得到生成器

但凡函数内出现yield,再去调用函数不会立即执行代码,会返回一个返回值,该返回值就是一个生成器,当对这个生成器调用next方法时,执行函数内代码,遇到yield暂停,再次调用next方法时,从上次结束的地方,继续运行

yield :

1.提供了一种自定义迭代器的解决方案

2.yield &return

相同点,都可以返回值,返回值没有类型限制\个数限制

不同点,return只能返回一个值,yield可以记录当前状态,下一次执行时,会从上次记录的状态后开始执行

函数的递归调用

函数嵌套调用的一种特殊形式

在调用一个函数的过程直接或者间接调用该函数本身,称之为递归调用

递归必须满足两个条件:

①每进入下一次递归调用,问题的规模都应该有所减少

②递归必须有一个明确的结束条件

递归有两个明确的阶段:

①回溯:一层一层递归调用下去

②递推:向后推

day14 迭代器,生成器,函数的递归调用的更多相关文章

  1. 你好,C++(27)在一个函数内部调用它自己本身 5.1.5 函数的递归调用

    5.1.5 函数的递归调用 在函数调用中,通常我们都是在一个函数中调用另外一个函数,以此来完成其中的某部分功能.例如,我们在main()主函数中调用PowerSum()函数来计算两个数的平方和,而在P ...

  2. c语言:函数的递归调用

    c语言可以将代码模块化,这是其很重要的一个特性. 说道代码模块化,我们很自然的就会联想到函数.而函数中,比较难的一个知识点就是函数的递归调用. 值得注意的是,函数的递归调用在现实工作并不是很常用,但是 ...

  3. Python(迭代器 生成器 装饰器 递归 斐波那契数列)

    1.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大优 ...

  4. Python 迭代器&生成器,装饰器,递归,算法基础:二分查找、二维数组转换,正则表达式,作业:计算器开发

    本节大纲 迭代器&生成器 装饰器  基本装饰器 多参数装饰器 递归 算法基础:二分查找.二维数组转换 正则表达式 常用模块学习 作业:计算器开发 实现加减乘除及拓号优先级解析 用户输入 1 - ...

  5. python--内置函数、匿名函数、递归调用

    匿名函数 有名函数: def func1(x): print(func1) 结果: <function func1 at 0x00000000005C3E18> 匿名函数: func2=l ...

  6. day14 迭代器 生成器 面向过程思想

    "" 迭代器 什么是迭代器(iterator) 器指的某种工具, 迭代指的是更新换代的过程,例如应用程序的版本更新从1.0 变成 1.1 再1.2 迭代的目的是要根据上一个结果,产 ...

  7. C51函数的递归调用

    前几天在写C51程序时用到了递归,简单程序如下: void WRITE_ADD(uchar addr,uchar wbyte) { START(); //先发送起始信号 WRITE_BYTE(0xa0 ...

  8. [C++程序设计]函数的递归调用

    在调用一个函数的过程中又出现直接或间接地调用 该函数本身,称为函数的递归(recursive)调用. 包含递归调用的函数称为递归函数. 在实现递归时,在时间和空间上的开销比较大 求n! #includ ...

  9. Java中函数的递归调用

    说到递归,java中的递归和C语言中也是很相似的,在Java中,递归其实就是利用了栈的先进后出的机制来描述的. public class HelloWorld { public static void ...

随机推荐

  1. FONT 字体颜色大全

    用这句代码 替换 AmericanTypewriter-Bold字段就会有不同的字体样式 _typeLabel.font = [UIFont fontWithName:]; Font Family: ...

  2. redis开发小结

    随着缓存在web服务中用的越来越广泛,redis可以说成为了目前最流行的NoSQL数据库!redis与memcached最大的不同在于redis支持更多的数据类型,包括string.hash.list ...

  3. re 模块的重新整理

    RE模块 import  re 的常用操作 查找 1. findall : ret = re.findall('\d+'.'sjkhk172按实际花费928') #正则表达式,待匹配的字符串,flag ...

  4. centos下svn的ldap认证配置

    前提:完成svn的基本安装 一.安装sasl相关组件 #yum install -y cyrus-sasl cyrus-sasl-lib cyrus-sasl-plain 二.查看SASL版本和提供的 ...

  5. 119 Pascal's Triangle II 帕斯卡三角形 II Pascal's Triangle II

    给定一个索引 k,返回帕斯卡三角形(杨辉三角)的第 k 行.例如,给定 k = 3,则返回 [1, 3, 3, 1].注:你可以优化你的算法到 O(k) 的空间复杂度吗?详见:https://leet ...

  6. C51 笔记

    一 关于宏常量的长度:C51中定义一个常数宏(默认是16位的),如果用宏表示一个32位的宏而不加'L'标志的话就会出错.如 #define BLOCK_A_BASEADDR  18*64*1024 / ...

  7. php __autoload函数 加载类文件

    面向对象的开发时,大家肯定都会遇到这样的问题,就是加载文件,一般都是加文件的头部inclue_once,require一大堆,看着很让人烦.当然你可以自己写程序来加载.php5以后引入了__autol ...

  8. hdu4419Colourful Rectangle

    链接 分别求出7种颜色覆盖的面积. 做法:每种颜色设定一个标号,以二进制表示R:100 G:010 B:001 .这样很明显可以知道RG:110 GB:011 以此类推. 求解时,需要开一个二维标记数 ...

  9. 《Openstack的搭建》RHEL6.5

    Openstack就是搭建一个较为完整的虚拟化平台,把一个完整的物理机划分成若干个虚拟机来跑,从而实现资源的充分利用. Openstack对硬件的要求很高,要是你的物理机内存是4G的话,虚拟机的内存给 ...

  10. WCF中的AsyncPattern

    WCF中的AsyncPattern   (系列博文源自 http://pfelix.wordpress.com/,由笔者翻译并整理,转载请注明) 在wcf 的 service contract中, 服 ...