递归的应用场景 化简代码,高级算法 1.在我们日常开发中,如果要遍历一个文件夹下面文件,通常会使用递归来实现 2.在后续的算法课程中,很多算法离不开递归,例如快速排序。 2.1.1 递归的特点 函数内部自己调用自己 必须有出口 回顾函数的写法,返回的位置 def return_num(): return 100 result = return_num() print(result) 3 + 2 + 1 = 6 3以内的数字累加 6 = 3 + 2 2以内数字累加和 = 2 + 1 以内数字累加和 1以内数字累加和 = 1 def sum_numbers(num): #出口 if num == 1 : return 1 #如果是1,直接返回1 --出口 return num + sum_numbers(num-1) result = sum_numbers(3) print(result) 如果没有出口,就会报错,RecursionErron :maximun recursion depth exceeded 递归错误,超过最大递归深度999-1000 lambda 表达式 如果一个函数只有一个函数值,就使用lamdba 表达式,简化函数代码 lambda 参数列表(可以省略) :表达式(带返回值的) def fn1(): return 200 print(fn1) #内存值 print(fn1()) fn2 = lambda :100 #想得到100的返回值,调用fn2() print(fn2) #<function <lambda> at 0x0000013F708B65E0> 函数。匿名函数 内存地址 print(fn2())#100 def sum1(a,b) : return a + b fn1 = sum1 (1 , 2) print(fn1) sum = lambda a,b : a + b #简化代码 print(sum(1,2)) lambda 表达式参数形式 无参数: fn1 = lambda : 100 print(fn1()) # 一个参数 fn2 = lambda a : a print(fn2('Hello world')) 默认参数/缺省参数,默认参数写法就是关键字的写法,key=value的写法 fn1 = lambda a,b,c=10 : a + b + c print(fn1(1,2)) 可变参数 fn1 = lambda *args : args #可变参数传入到lambda 表达式后,返回值为元组,一个数据的元组后面也得加个逗号 print(fn1(1,2,3,4)) fn2 = lambda **kwargs : kwargs #接收的不定长的关键字参数,返回的是字典,**kwargs 形参 print(fn2(name='Python',age = 30,id = 40)) 带判断的lamdba 的应用 lambda 函数数字比大小,带if 判断 fn1 = lambda a,b : a if a > b else b #成立的返回值a写在前面。 print(fn1(2,1)) 列表数据的排序 按字典的key排序 students = [ {'name':'tOM','age' : 20}, {'name' : 'rose','age':30}, {'name' : 'jack','age' :40} ] # 按name值进行升序排序 students.sort(key=lambda x : x['name'],reverse=False) print(students) #按name值进行降序排序 students.sort(key=lambda x : x['name'],reverse=True) print(students) #按age值降序排序 students.sort(key = lambda x : x['age'],reverse=True) print(students) #按age值升序排序 students.sort(key=lambda x : x['age'],reverse=False) print(students) ###################高阶函数################# 把函数作为参数传入,这样的函数称为高阶函数,高阶函数是函数式编程的体现。函数式编程就是指这种高度抽象的编程方式。 print(abs(-10)) #abs 函数用来完成对数字求绝对值计算,也就是正数 print(round(1.5))#round 四舍五入计算 print(round(1.2))# 任意两个数字,绝对值计算。 def sum(a,b): return abs(a) + abs(b) result = sum(-10,-20) print(result) def sum(a,b): return round(a) + round(b) result = sum(100.4,200.9) print(result) ##函数的灵活性,可以使用abs,可以round def add_num(a,b,f): #f为函数,作为一个参数出现了 return f(a) + f(b) result = add_num(-1.1,-2.1,round) print(result) ############内置高阶函数##############3 map(func,lst),参数1函数名,参数2列表序列。将传入的函数变量func作用到lst变量的每个元素中,并将结果组成新的列表 返回。 计算list1 序列中各个数字的2次方 list1 = [1,2,3,4,5] #准备数据 def func(x): #定义函数,2次方运算 return x ** 2 result =map(func,list1) #调用map print(result) #map函数的内存地址 print(list(result)) #输出结果 ############reduce()###### reduce(func,list1),参数1是函数名,参数2为列表。func必须有2个参数,每次func计算的结果继续和序列的下一个元素做累计计算。 reduce()传入参数func必须接收2个参数。reduce():功能函数计算的结果和序列的下一个数据做累计计算。 import functools #导入模块 list1 = [1,2,3,4,5] def sum(a,b): #定义函数 return a + b result = functools.reduce(sum,list1) #调用reduce print(result) #打印结果 #######filter()########################3 filter(func,lst)函数用于过滤序列,过滤掉不符合条件的元素,返回一个filter对象。如果要转换为列表 可以用list()来转换。 list1 = [1,2,3,4,5,6,7,8,9,10] def func(x): return x % 2 == 0 result = filter(func,list1) print(result) print(list(result))
函数----递归学习(交流学习)
最新推荐文章于 2024-02-15 01:25:20 发布