自己不断调用自己的过程
2.递归求和
1 def sum(arg): 2 if arg == 1: 3 return 1 4 return arg + sum(arg - 1) 5 print(sum(5))
3.递归分解
1 def a(arg): 2 print(arg) # 第一步: 3 3 b(arg - 1) # 第二步:b(2) 4 print(arg) # 第八步: 3 5 6 7 def b(arg): 8 print(arg) # 第三步:2 9 c(arg - 1) # 第四步:1 10 print(arg) # 第七步:2 11 12 13 def c(arg): 14 print(arg) # 第五步:1 15 print(arg) # 第六步:1 回到函数调用处 16 17 18 a(3)
1.格式
lambda[参数]:表达式内容
2.定义
不在使用def关键字定义函数,而是使用lambda创建匿名函数
3.特点
--lambda为一个表达式,所以定义比def简单
--lambda主体是一个表达式,而不是代码块,所以只能封装有限的逻辑
--lambda有自己的命名空间
4.示例
1 res = lambda a, b: a + b 2 print(res(1, 2))
1.map、reduce函数
---map函数
fn:传递函数
lsd:集合
功能:将传入的函数作用在集合的每一个元素上,并返回iterator
示例:
1 list1 = ['1', '2', '3'] 2 def changint(a): 3 print(a, type(a)) 4 return int(a) 5 print(list(map(changint, list1))) 6 print(list(map(bool, list1))) 7 print(list(map(float, list1)))
--reduce函数
fn:传递为一个函数
lsd:传入集合
功能:传入的集合中的每个元素都会作用在我们传递的函数上,做累加运算,必须传递两个参数。
1 from functools import reduce 2 list1 = list(range(10)) 3 4 5 def mysum(x, y): 6 print(x, y) 7 return x + y 8 print(reduce(mysum, list1))
fn:传入函数
lsd:传入集合
用于过滤列表;将列表中的每个元素作用于传入的函数上,根据返回值的true/false来确定是否保留该元素
示例:
1 lis = list(range(1, 11)) 2 def fun(i): 3 if not i % 2: 4 return True 5 return False 6 print(list(filter(fun, lis)))
去除空字符串
1 lis = list(range(1, 11)) 2 def fun(i): 3 if not i % 2: 4 return True 5 return False 6 7 lis1 = ['a', 'b',' ', 'c', ' ', '1'] 8 def fun1(i): 9 return i and i.strip() 10 print(list(filter(fun1, lis1)))
sorted函数
lsd:集合
key:排序的规则
作用:将集合中的每个元素作用于key函数上,根据函数结果进行排序。
示例:
1 lis1 = [1, 2, 0, 5, 3, -1] 2 print(list(sorted(lis1))) # 大小排序 3 lis2 = ['a', 'abc', 'ab', 'abcddd', 'addd'] 4 print(sorted(lis2, key=len)) # 按长度排序