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

    函数的递归调用

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

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

    递归必须满足两个条件:

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

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

    递归有两个明确的阶段:

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

    ②递推:向后推

  • 相关阅读:
    JAVA EE获取浏览器和操作系统信息
    ANT与SVN集成
    ANT property三种使用方式
    跨机器的文件夹访问和传输方法
    yolov5网络结构分析
    点到直线距离计算及g++编译
    深拷贝与浅拷贝(c++和python)
    qt工程环境设置
    Git 篇
    PyCharm 使用的技巧
  • 原文地址:https://www.cnblogs.com/robert-zhou/p/10061478.html
Copyright © 2020-2023  润新知