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

    函数的递归调用

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

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

    递归必须满足两个条件:

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

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

    递归有两个明确的阶段:

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

    ②递推:向后推

  • 相关阅读:
    【26.09%】【codeforces 579C】A Problem about Polyline
    【水水水】【洛谷 U4566】赛车比赛
    【24.58%】【BZOJ 1001】狼抓兔子
    【心情】2016ICPC青岛站打铁记
    【record】11.7..11.13
    Identifying a distributed denial of service (DDOS) attack within a network and defending against such an attack
    在页面所有元素加载完成之后执行某个js函数
    day38 01-Spring框架的概
    day37 10-SH整合的案例练习
    day37 09-Struts2和Hibernate整合环境搭建
  • 原文地址:https://www.cnblogs.com/robert-zhou/p/10061478.html
Copyright © 2011-2022 走看看