Python第十四天递归函数和匿名函数

49 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

递归

递归的应用场景

递归是一种编程思想,应用场景:

  1. 在我们日常的开发中,如果要遍历一个文件夹下面所有的文件,通常会使用递归来实现;
  2. 在后续的算法中,很多算法都离不开递归,例如:快速排序

递归的特点

  1. 函数内部自己调用自己
  2. 必须有出口

应用:3以内数字累加和

# 3 + 2 +1
#num 表示空的意思
def sum_numbers(num):
    #当前数字+当前数字-1的累加和
    #1.如果是1,直接返回1--到出口
    if num==1:
        return 1
    #如果不是1,重复执行累加并返回结果
    return num + sum_numbers(num-1)
# 当为3的时候就输出6
sum_result=sum_numbers(3)
#输出结果为6
print(sum_result)

这里的话要知道return 这个函数的用法,return 函数的用户1返回值,2停止函数运行,

lambda表达式

lambda的应用场景

如果一个函数有一个返回值,并且只有一句话代码,可以使用lambda简化

lambda语法

lambda 参数列表 : 表达式

注意

  1. lambda表达式的参数可有可无,函数的参数在lambda表达式完全适合
  2. lambda表达式能接收任何数量的参数但只能返回一个表达式值

快速入门

#函数
def fn1():
    #返回值200
    return 200#打印为空
print(fn1)
#输出200
print(fn1())
​
​
​
#lambda表达式也是一个匿名函数
fn2=lambda:100
#打印内存地址
print(fn2)
#打印的是100
print(fn2())

输出结果

200
 at 0x7f6aba735280>
100

示例:计算a+b

函数实现

#设置一个函数add,函数里面有ab两个行参
def add(a,b):
    #函数的执行代码是a+b 行参相加
    return a + b
​
#返回值等于add函数,但是这个适合我们给到了这个函数里面1和2顶掉了行参的位置
result = add(1,2)
#这个适合调用返回值,返回值调用add函数,并把1和2带入函数执行代码中去
#输出结果为3
print(result)

输出

3

lambda实现

#定义一个变量,变量所赋值的是一个匿名函数,函数中有a,b两个行参,而执行代码是a+b
fn1=lambda a,b:a+b
#输出fn1并把数字12带入到变量中,而fn1中实参只要ab那么12就会顶掉ab位置,任何执行代码a+b(1+2)
print(fn1(1,2))

输出

3

lambda的参数形式

无参数

#直接就是lambda冒号跟着一个返回值100
fn1=lambda:100
#直接输出fn1()变量名函数调用 输出100
print(fn1())

一个参数

#直接就是lambda 并且有一个形参a 冒号跟着一个返回值a
fn1=lambda a:a
#这个适合输出调用fn1变量名 并且传入hello world 到形参位置,当中执行输出的适合,返回值会输出形参a位置上的数值hello world
print(fn1('hello world'))

默认参数

#这里定义了一个lambda 而里面有三个形参为abc,但是形参c是有值的那么形参c就是默认参数,紧跟着冒号 执行代码a+b+c,如果ab形参都没有传值进来,那么就只会输出100fn1=lambda a,b,c=100: a+b+c
#这时候输出变量fn1 并且传值到ab两个形参位置上,并执行代码a+b+c10+20+100)=130(输出结果)
print(fn1(10,20))

可变参数:*args

fn1 =lambda *args: args
print(fn1(10,20,30))
#他虽然有一个形参,但是可以传入多个值,因为他是一个可变参数加一个*星号就可以了
#注意:这里的可变参数传入到lambda之后,返回值为元组
#输出结果为(10, 20, 30)

可变参数:**kwargs

fn1 =lambda **kwargs:kwargs
print(fn1(name='python',age=20))
​
#输出结果
#{'name': 'python', 'age': 20}
#注意:这里的可变参数传入到lambda之后,返回值为字典

lambda的应用

带判断的lambda

#首先lambda看作一个函数
#函数里面有ab两个形参
#冒号跟着执行代码
#执行代码是  if判断 当a大于b 就执行输出a  else 否则打印出b
fn1 = lambda a,b:a if a > b else b
print(fn1(1000,500))
​
​
#输出1000

列表数据按字典key的值排序

students =[
    {'name':'TOM','age':20}
    {'name':'ROSE','age':19}
    {'name':'Jack','age':22}
]
​
#sort(key=lambda..., reverse=bool数据)
#1.name key 对应的值进行升序排序
students.sort(key=lambda x: x['name'])
print(students)
#2.name key对应的值进行降序排序
students.sort(key=lambda x: x['name'],reverse=True)
print(students)
#3.age key对应的值进行升序排序
students.sort(key=lambda x: x['age'])
print(students)

\