zoukankan      html  css  js  c++  java
  • 递归函数、匿名函数、内置函数

    Python-16

    @(Python)

    一、函数递归

    1. 什么是函数递归

    • 函数递归,就是函数的递归调用,是一种特殊的嵌套调用,在调用一个函数时,直接或间接的调用了自己

    ① 递归必须要有两个阶段

    • 递推阶段:先一层一层递归调用下去, 每进入下一层递归,问题的规模必须减少
    • 回溯阶段:得到结果后,再一层一层回溯

    补充说明:

    • 递归必须要有一个明确的结束条件,在满足该条件时结束递推,并开始回溯
    • 只有下一层递归结束,上一层才能结束
    • 递归不是单独的重复,根据问题的的规模,每进入下一层递归,问题的规模必须减少
    • 递归的目的在于,通过不断的重复,来接近一个最终的结果

    ② 直接调用自己

    Alt text

    Alt text

    • 说明:Python中有递归优化,达到一定层数就终止掉,避免无限制占用内存

    ③ 间接调用自己

    Alt text

    • 取出下面列表中的数字x_list=[1,[2,[3,[4,[5,[6,[7,[8,[9,[10]]]]]]]]]]

    Alt text

    ④ 递归层数更改(了解)

    • 查看递归的层数限制,使用import sys模块

    Alt text

    • 更改递归层数(了解)

    Alt text

    2. 递归的二分法应用

    • 如下,有从小到大排列的整型数字列表
    • 要求:输入数字,判断这个数字是否在这个列表中

    ① 一般方法

    nums=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
    search_num=10
    for item in nums:
        if item == search_num:
            print('find it')
            break
    else:
        print('not exist')
    

    ② 递归+二分法的方法

    • 二分法:就是将列表不断的从中间分成两份,缩小查找的范围
    • 利用列表切片,不断的切列表

    Alt text

    number_list=[1,2,3,4,5,6,7,8,9,10,11,12,13,14]
    
    def number(search_number,number_list):
        if len(number_list) == 0:  # 如果==1,那么list_mid_index+1就不能加1
            print('number is not exist')
            return
        list_mid_index=len(number_list)//2
        if search_number > number_list[list_mid_index]:
            number_list=number_list[list_mid_index+1:]
            number(search_number,number_list)
        elif search_number < number_list[list_mid_index]:
            number_list=number_list[:list_mid_index]
            number(search_number,number_list)
        else:
            print('find it')
    
    number(1,number_list)
    

    二、匿名函数

    • 匿名函数是没有绑定函数名字的函数
    • 匿名函数一般不单独使用,一般配合max min map sorted filter内置函数使用
    • 匿名函数一般使用一次就不用了

    1. 匿名函数的格式

    • lambda x,y:x+y,在没有调用前,就是内存地址
    • 匿名函数写在一行,lambda表示匿名函数
    • x+y相当于return x+y

    2. max()+匿名函数

    • max(可迭代对象)求最大值
    salaries={
        'egon':3000,
        'alex':10000000,
        'wupeiqi':10000,
        'yuanhao':2000
    }
    取出这个字典中,工资最高的信息
    

    ① max()的工作原理

    Alt text

    • max的返回值不可改,比如传入的是字典,那返回值就是字典的key;传入的是列表,返回的就是元素
    • 因此,max取出的是字典的key,统计的是key字符串的个数最多的
    • 虽然max的返回值不可改,但是改变max的比较依据

    ② 普通使用方式

    使用格式:max(salaries,key=func)

    • max(a)首先将迭代对象a变为迭代器对象
    • ② 运行next,将可迭代器对象a当做参数传给key后面的函数funcfunc()函数处理后,得到的返回值就是比较依据
    • max()根据这个返回值做比较,最后的结果是和字典对应的key

    Alt text

    ③ 配合匿名函数使用

    Alt text

    补充说明:

    • key=func表示指定max的比较依据是func的返回值,这个func函数,可以是自定义的匿名函数
    • max结果,当做参数传给key后面的函数,将这个函数返回值当做比较依据

    3. min()+匿名函数

    • min(可迭代对象)求最小值

    Alt text

    4. sorted()+匿名函数

    • sorted()默认将列表中内容,按从小到大顺序排列
    • sorted()不改变原值,重新赋值会开辟新内容空间

    Alt text

    • sorted(列表,reverse=True)从大到小顺序排列

    Alt text

    ① 配合匿名函数使用

    salaries={
        'egon':3000,
        'alex':10000000,
        'wupeiqi':10000,
        'yuanhao':2000
    }
    按照工资从低到高,显示人名
    按照工资从高到低,显示人名
    
    • 如果不改变对比依据,默认会以key作为对比依据

    Alt text

    • 按照工资从低到高,显示人名:sorted(salaries,key=lambda k:salaries[k])

    Alt text

    • 按照工资从高到低,显示人名:sorted(salaries,key=lambda k:salaries[k],reverse=True)

    Alt text

    5. map()+匿名函数

    ① map()的工作原理

    使用格式:map(lambda,names)

    • map(lambda,names)首先将迭代对象names变为迭代器对象
    • ② 运行next,将可迭代器对象names当做参数传给前面的匿名函数lambda,匿名函数lambda的返回值当做map的结果
    • names中的值,按照lambda中的规则,映射成新的值
    names=['a','b','c','d','e','f']
    
    print(map(lambda x:x+'_it',names))
    x_list=map(lambda x:x+'_it',names)
    print(list(x_list))
    

    Alt text

    6. filter()+匿名函数

    ① filter()的工作原理

    使用格式:filter(lambda,names)

    • filter(lambda,names)首先将迭代对象names变为迭代器对象
    • ② 运行next,将可迭代器对象names当做参数传给前面的匿名函数lambdafilter会判断匿名函数lambda的返回值的真假,如果为真就留下

    ② 配合匿名函数使用

    filter(lambda x:x.endswith('tesla'),names)留下以tesle结尾的元素

    Alt text

    7. 其他调用方式:

    Alt text

    Alt text

    三、内置函数

    Alt text

    1. 需要掌握的

    ① bytes()

    • 编译为二进制
      Alt text

    2. 了解的

    ① abs()

    • 将负数转成正数

    Alt text

    ② all()

    • 只要有一个值不为真,全部都不为真;空为真

    Alt text

    ③ any()

    • 只要有一个布尔值为真,都为真;空为False

    Alt text

    ④ callable()

    • 判断是否为可以被调用的

    Alt text

    ⑤ chr()

    • 根据ASCII编码表,将数字转成对应的字符
      Alt text

    ⑤ ord()

    • 根据ASCII编码表,将字符转成对应的数字

    Alt text

    ⑥ dir()

    • dir可以查看内置方法可以调哪些功能

    Alt text

    ⑦ divmod()

    • divmod处理结果为元组形式(商,余数)
    • 用途:页面的分页显示

    Alt text

    ⑧ enumerate()

    • 取出列表索引

    Alt text

    ⑨ eval()

    • 将字符窜的表达式提取出来
    • 可以将字符串类型的列表、字典转化成列表、字典

    Alt text

    ⑩ frozenset()

    Alt text

    ⑪ globals和locals

    • globals查看全局命名空间的变量 ;locals查看局部的命名空间的变量

    Alt text

    Alt text

    ⑫ hash()

    • 判断是否为可哈希
      Alt text

    ⑬ help()

    • 查看一个函数的注释

    Alt text

    ⑭ pow()

    • pow(3,2,2)表示(3**2%2,3的2次方,除2后取余数

    Alt text

    ⑮ round()

    • 四舍五入

    Alt text

    ⑯ slice()

    • 类似于列表的分片,slice(1,5,2)1表示起始位置,5结束位置,2表示步长

    Alt text

    ⑰ sum()

    • sum()求和

    Alt text

    import()

    • __import__('字符串')表示以字符串的格式导入模块
    • import表示导入模块

    Alt text

  • 相关阅读:
    [转载]windows进程中的内存结构
    RTTI和4个强制转换运算符
    由于应用程序配置不正确,程序未能启动
    光照
    服务器数据同步
    SAP
    PHP输入流php://input
    五款常用mysql slow log分析工具的比较
    开发搜索引擎–PHP中文分词
    大型网站调试工具之一(php性能优化分析工具XDebug)
  • 原文地址:https://www.cnblogs.com/itone/p/9524594.html
Copyright © 2011-2022 走看看