函数----递归学习(交流学习)

递归的应用场景  化简代码,高级算法
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))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PythonYL学习进阶

朋友,一起学习,请多多支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值