zoukankan      html  css  js  c++  java
  • python的递归函数

    今日所得

      函数递归

      算法之二分法

      三元表达式

      列表生成式

      字典生成式

      匿名函数

      常用的内置函数

     

    函数的递归

      是指在函数加括号调用的时候,会再次调用到自身的函数

      不过需要一个条件来判断是否停止继续调用

    #举个例子
    def func():
        print('from func')
        func()  # 当函数执行到这一步时又一次调用了函数自身
    func()

      上面这个列子实际是一个无限循环的,但是函数不应该无限循环下去,因为每一次调用函数都会产生一个属于它的名称空间,如果无限循环下去,那么就会尝试内存溢出的问题,于是python中有了一个递归层数的限制。

    #我们通过改变上面的程序来查看这个限制是多少:
    def func(n):
          print('from func',n)  # 将n的值打印出来
          func(n+1)  # 每次递归让n加一
    
    func(1)  # 从1开始
    """
    函数递归的深度为1000,但是不精准一般为998或者997左右
    可以通过代码和模块来修改递归深度
    """
    import sys
    print(sys.getrecursionlimit())  
    sys.setrecursionlimit(2000)

     

      递归分为两个阶段

      1.回溯:就是一次一次的调用自身的函数,但是调用的前提是每一次函数执行完毕之后,就会朝着最终答案向前一步,直到得到这个答案,达到结束函数的条件

      2.递推:就是向回一步一步的反向推导出答案的过程

      

     

      算法二分法:可以高效的从一个列表中找出你需要的元素是否在列表中

      内部原理是使用函数的递归,从中间将列表一分为二,变成两个列表

      判断你所需的元素与列表的中间值的大小,再从剩下的两个列表中找

                    ****************前提是列表要有顺序*****************

     

      三元表达式

      是用来判断两个元素是否满足条件,满足条件则输出那个数

      

    res = x if x > y else y
    # 如果if后面的条件成立返回if前面的值 否则返回else后面的值
    """
    三元表达式固定表达式
        值1 if 条件 else 值2
            条件成立 值1
            条件不成立 值2
    """

     

     

    列表生成式

      能够快速简单的对一个列表里的所有元素进行操作

      列表生成式的内部原理:使用for循环先将列表里的元素一一拿出,交由if条件语句进行判断

      如果满足if则会交给for之前的代码进行处理,如果不满足则会直接舍弃这个元素

     

     

    匿名函数

      所谓匿名函数,见名知意就是没有名字的函数

      匿名函数的特点,执行完就自动销毁了,只是临时使用

    res = (lambda x,y:x+y)(1,2)
    # :左边的相当于函数的形参
    # :右边的相当于函数的返回值
    # 匿名函数通常不会单独使用,是配合内置函数一起使用

    常用内置函数

      map  zip  filter  sorted  reduce

    # map 映射
    l = [1,2,3,4,5,6]
    # print(list('hello'))
    print(list(map(lambda x:x+5,l)))  # 基于for循环
    
    
    # zip 拉链  # 基于for循环
    l1 = [1,2,]
    l2 = ['jason','egon','tank']  # 有几个元素能对应上就组合几个元素
    l3 = ['a','b','c']
    print(list(zip(l1,l2,l3)))
    
    
    # filter 过滤   元素满足条件就过滤不要
    l = [1,2,3,4,5,6]
    print(list(filter(lambda x:x != 3,l)))  # 基于for循环
    
    
    
    # sorted  排序 将元素从小到大依次排序
    # reverse 反转将列表里的元素反过来排
    l = ['jason','egon','nick','tank']
    print(sorted(l,reverse=True))
    
    
    
    from functools import reduce
    l = [1,2,3,4,5,6]
    print(reduce(lambda x,y:x+y,l,19))  # 19初始值  第一个参数
    # 当初始值不存在的情况下 按照下面的规律
    # 第一次先获取两个元素 相加
    # 之后每次获取一个与上一次相加的结果再相加
  • 相关阅读:
    转载:网关的概念以及形象的比喻
    IP地址的分类
    Linux TOP 交互命令
    Unix系统引导过程(简单步骤)
    常用shell命令中你所不熟悉的参数
    3.通过现有的PDB创建一个新的PDB
    2.oracle 12c 创建-访问-关闭-删除PDB
    1.oracle 12c基础
    笔记本设置无线热点
    Pivot 和 Unpivot
  • 原文地址:https://www.cnblogs.com/AbrahamChen/p/11178147.html
Copyright © 2011-2022 走看看