递归函数、匿名函数、内置函数

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

原文地址:https://www.cnblogs.com/itone/p/9524594.html