day14 迭代器,生成器,函数的递归调用

1.什么是迭代器

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

迭代取值的工具

2.为什么要用迭代器

迭代器的优点

​ ①不依赖于索引取值

​ ②更节省内存

缺点:

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

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

3.为何要用迭代器:

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

iterable :strlist upledicset文件

迭代器对象

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可以记录当前状态,下一次执行时,会从上次记录的状态后开始执行

函数的递归调用

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

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

递归必须满足两个条件:

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

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

递归有两个明确的阶段:

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

②递推:向后推

原文地址:https://www.cnblogs.com/robert-zhou/p/10061478.html