Python-16
@(Python)
一、函数递归
1. 什么是函数递归
- 函数递归,就是函数的递归调用,是一种特殊的嵌套调用,在调用一个函数时,直接或间接的调用了自己
① 递归必须要有两个阶段
- 递推阶段:先一层一层递归调用下去, 每进入下一层递归,问题的规模必须减少
- 回溯阶段:得到结果后,再一层一层回溯
补充说明:
- 递归必须要有一个明确的结束条件,在满足该条件时结束递推,并开始回溯
- 只有下一层递归结束,上一层才能结束
- 递归不是单独的重复,根据问题的的规模,每进入下一层递归,问题的规模必须减少
- 递归的目的在于,通过不断的重复,来接近一个最终的结果
② 直接调用自己
- 说明:Python中有递归优化,达到一定层数就终止掉,避免无限制占用内存
③ 间接调用自己
- 取出下面列表中的数字
x_list=[1,[2,[3,[4,[5,[6,[7,[8,[9,[10]]]]]]]]]]
④ 递归层数更改(了解)
- 查看递归的层数限制,使用
import sys
模块
- 更改递归层数(了解)
2. 递归的二分法应用
- 如下,有从小到大排列的整型数字列表
- 要求:输入数字,判断这个数字是否在这个列表中
① 一般方法
nums=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]search_num=10for item in nums: if item == search_num: print('find it') breakelse: print('not exist')
② 递归+二分法的方法
- 二分法:就是将列表不断的从中间分成两份,缩小查找的范围
- 利用列表切片,不断的切列表
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()的工作原理
max
的返回值不可改,比如传入的是字典,那返回值就是字典的key
;传入的是列表,返回的就是元素- 因此,
max
取出的是字典的key
,统计的是key
字符串的个数最多的- 虽然
max
的返回值不可改,但是改变max
的比较依据
② 普通使用方式
使用格式:
max(salaries,key=func)
- ①
max(a)
首先将迭代对象a
变为迭代器对象- ② 运行
next
,将可迭代器对象a
当做参数传给key
后面的函数func
,func()
函数处理后,得到的返回值就是比较依据- ③
max()
根据这个返回值做比较,最后的结果是和字典对应的key
③ 配合匿名函数使用
补充说明:
key=func
表示指定max的比较依据是func
的返回值,这个func
函数,可以是自定义的匿名函数- 将
max
结果,当做参数传给key后面的函数,将这个函数返回值当做比较依据
3. min()+匿名函数
min(可迭代对象)
求最小值
4. sorted()+匿名函数
sorted()
默认将列表中内容,按从小到大顺序排列sorted()
不改变原值,重新赋值会开辟新内容空间
sorted(列表,reverse=True)
从大到小顺序排列
① 配合匿名函数使用
salaries={ 'egon':3000, 'alex':10000000, 'wupeiqi':10000, 'yuanhao':2000}按照工资从低到高,显示人名按照工资从高到低,显示人名
- 如果不改变对比依据,默认会以
key
作为对比依据
- 按照工资从低到高,显示人名:
sorted(salaries,key=lambda k:salaries[k])
- 按照工资从高到低,显示人名:
sorted(salaries,key=lambda
k:salaries[k],reverse=True)
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))
6. filter()+匿名函数
① filter()的工作原理
使用格式:
filter(lambda,names)
- ①
filter(lambda,names)
首先将迭代对象names
变为迭代器对象- ② 运行
next
,将可迭代器对象names
当做参数传给前面的匿名函数lambda
,filter
会判断匿名函数lambda
的返回值的真假,如果为真就留下
② 配合匿名函数使用
filter(lambda x:x.endswith('tesla'),names)
留下以tesle
结尾的元素
7. 其他调用方式:
三、内置函数
1. 需要掌握的
① bytes()
- 编译为二进制
2. 了解的
① abs()
- 将负数转成正数
② all()
- 只要有一个值不为真,全部都不为真;空为真
③ any()
- 只要有一个布尔值为真,都为真;空为
False
④ callable()
- 判断是否为可以被调用的
⑤ chr()
- 根据
ASCII
编码表,将数字转成对应的字符
⑤ ord()
- 根据
ASCII
编码表,将字符转成对应的数字
⑥ dir()
dir
可以查看内置方法可以调哪些功能
⑦ divmod()
divmod
处理结果为元组形式(商,余数)
- 用途:页面的分页显示
⑧ enumerate()
- 取出列表索引
⑨ eval()
- 将字符窜的表达式提取出来
- 可以将字符串类型的列表、字典转化成列表、字典
⑩ frozenset()
⑪ globals和locals
globals
查看全局命名空间的变量 ;locals
查看局部的命名空间的变量
⑫ hash()
- 判断是否为可哈希
⑬ help()
- 查看一个函数的注释
⑭ pow()
- **
pow(3,2,2)
表示(3**2%2,3的2次方,除2后取余数**
⑮ round()
- 四舍五入
⑯ slice()
- 类似于列表的分片,
slice(1,5,2)
,1
表示起始位置,5
结束位置,2
表示步长
⑰ sum()
sum()
求和
⑱ import()
__import__('字符串')
表示以字符串的格式导入模块import
表示导入模块