zoukankan      html  css  js  c++  java
  • 迭代器、生成器、递归、二分法

    一.迭代器

    1.什么是迭代器:迭代取值的工具

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

    2.为什么要用迭代器

    优点:1.提供一种不依赖索引的迭代取值方式

               2.更加节省内存

    缺点:1.没有按照索引的取值方式灵活

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

    3.如何用迭代器

    可迭代的对象:内置有__iter__方法的对象,称之为可迭代对象。(str/list/tuple/dict/set/文件对象)

    迭代器对象:内置既有_iter__方法,又有__next__方法的对象,称之为迭代器对象。(文件对象)

    注:调用可迭代对象下__iter__方法,会有一个返回值,该返回值就是内置的迭代器对象

           我们通常不用__iter__这样的形式,直接用iter()这种形式

     while True:
         try:
               v=iter_d.__next__()
               print(v)
          except StopIteration:  
               break

    #我们用try,except Stoplteration这种形式,在循环取迭代器时,负责监控报错信息,这样就避免掉程序

    报错,崩溃等现象出现。

    4.for循环的底层原理

        4.1调用in后面那个对象的__iter__方法,拿到一个迭代器对象

        4.2调用迭代器对象__iter__()方法,将得到的返回值赋值给in前面的变量名,循环往复直到取值完毕抛出异常Stoplteration

        4.3捕捉异常结束循环

    二.生成器

    1.生成器就是一种自定义的迭代器

    2.如何得到生成器:函数内出现yield关键字,再去调用函数不会立即执行函数体代码,会得到一个返回值,该返回值就是生成器对象,即自定义的迭代器。

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

                2.yield & return

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

                  不同点:return只能返回一个值,yield可以让函数暂停在某一个位置,可以返回多次值

    三.函数的递归调用

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

    #调用函数时会产生局部名称空间,占用内存,在递归调用函数时,如果出现一种死循环的情况,python解释器的内存管理机制为了防止其无限制占用内存,对函数的递归调用做了最大的层级限制

    递归必须满足两个条件:1.每进入下一次递归调用,问题的规模都应该有所减少

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

    递归有两个明确的阶段:1.回溯:2.递推

    四.二分法

           想从一个按照从小到大排列的数字列表中找到指定的数字,遍历的效率太低,用二分法(算法的一种,算法是解决问题的方法)可以极大低缩小问题规模

    def binary_search(list1,find_num):
        print(list1)
        if len(list1) == 0:
             print('not exist')
             return
        mid_index=len(list1) // 2
        if find_num > list1[mid_index]:
                binary_search(list1[mid_index + 1:],find_num)
        elif find_num < list1[mid_index]:
                binary_search(list1[:mid_index],find_num)
        else:
               print('find it')

    binary_search(nums,203)

  • 相关阅读:
    深入理解计算机系统 第六章 存储器层次结构 第二遍
    深入理解计算机系统 第六章 存储器层次结构
    深入理解计算机系统 第八章 异常控制流 Part2 第二遍
    深入理解计算机系统 第八章 异常控制流 part2
    深入理解计算机系统 第八章 异常控制流 Part1 第二遍
    深入理解计算机系统 第八章 异常控制流 part1
    深入理解计算机系统 第三章 程序的机器级表示 Part2 第二遍
    深入理解计算机系统 第三章 程序的机器级表示 part2
    深入理解计算机系统 第三章 程序的机器级表示 Part1 第二遍
    深入理解计算机系统 第三章 程序的机器级表示 part1
  • 原文地址:https://www.cnblogs.com/wangke0917/p/10060100.html
Copyright © 2011-2022 走看看