python:浅析(lambda)匿名函数

python:浅析(lambda)匿名函数

1、什么是匿名函数

​ 所谓匿名,意即不能再使用 def 关键字来创建这种标准形式的函数,而是使用lambda关键字创建的函数被称之为匿名函数,也就是大众所知的lambda表达式,而使用def关键字创建的函数则称之为标准函数

2、语法格式

lambda 参数1,参数2……参数n :表达式
# 注意:lambda 是一个单一的表达式,而不是语句块

3、特点:

	1. lambda函数可以接收任意数量和任意类型的参数,但只能有一个表达式,仅仅只能lambda表达式中封装有限的代码逻辑,所以说匿名函数要比标准函数简单的多
	2. lambda函数不能访问 除 自己参数列表外的全局变量
	3. lambda表达式默认会返回一个值,所以不需用return返回
	4. lambda函数没有函数名
	5. lambda函数可以作为参数传递

4、使用场景

  1. 函数内体只有一条语句 或者说 这个函数的作用比较简单就是对两个数进行运算,或者说要找某个可迭代对象中符合条件的元素,那么就可以使用lambda函数,并有需求的话可以配合高阶函数使用

    案例:

    # 【1】匿名含糊的基本操作
    
    # 需求:要计算a和b的和
    sum1 = lambda a,b:a+b
    print(sum1(10,20))
    
    # 【2】匿名函数配合高阶函数使用
    
    # 需求求出1-100之间的所有偶数,配合使用filter函数使用
    # 先使用列表推导式,创建一个包含1-100的列表
    my_list = [i for i in range(1,101)]
    # 再通过filter函数,拿出符合条件的列表
    ret = filter(lambda a:a % 2 == 0,my_list)
    print(ret)
    
    
  2. 如果该函数比较简单,要作为另一个函数的参数进行传递,那么就可以使用匿名函数

    案例:

# 【1】在函数调用时创建匿名函数
# 需求:通过一个标准函数调用匿名函数
def func(func_name,a,b):
    # 在函数内调用匿名函数,并返回结果
    sum1 = func_name(a,b)
    print(sum1)

# 调用函数,并将匿名函数传递,并传入两个关键字参数
func(lambda a,b:a+b,a=20,b=30)



# 【2】在全局变量中提前定义好匿名函数
def func(func_name,a,b):
    # 在函数内调用匿名函数,并返回结果
    sum1 = func_name(a,b)
    print(sum1)
# 在全局变量中声明定义匿名函数,并将引用地址赋值给这个变量
func_name = lambda a,b:a+b
# 调用函数,并将匿名函数的引用地址传递,并传入两个关键字参数
func(func_name,a=20,b=30)

注意:

​ 这里出于性能的原因,我更推荐大家使用方法1,就是在函数调用的时候直接将匿名函数作为参数传递,而不是先在全局定义变量,再传递。这样做的原因:当程序加载全局中的匿名函数将创建,等待调用传递,然后等到程序结束才释放全局的内存,所以如果匿名函数直接作为参数传递,那么在该函数调用完成之后,局部变量就自动释放内存,所以说,将匿名函数直接作为参数传递会程序运行效率会更高。

5、在sort函数中的运用

​ 众所周知,sort函数是列表中用于排序的,想必大家都会使用sort函数对一维列表进行排序,语法如下:

# 【1】要进行排序的列表
my_list = [1,8,7,3,0,4]
# 【2】使用sort函数,并且参数是reverse = True或者False,默认False是从小到大排列,True是从大到小排列
my_list.sort(reverse=True)
# 【3】输出排好的列表
print(my_list)

​ 但如果是二维列表,或者说列表嵌套元组、字典那该怎么办?其实sort还有一个参数key,key接收的是一个要有返回的只有一个形参的函数,那么这个函数我们就可以用匿名函数代替,表达式是你要比较的一列数据,表示此元素的权值,sort将按照权值大小进行排序

# 列表字典嵌套排序
my_list = [
    {"name":"小明","age":18},
    {"name":"小黄","age":16},
    {"name":"小猪","age":25},
    {"name":"小梅","age":10},
]
# 前提是各个元素都要有这个值
my_list.sort(key=lambda a:a["age"])
# 如果是列表嵌套列表,那么就根据二维列表的哪一个元素进行排,元素类似
# 最后输出排好的列表
print(my_list)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

御弟謌謌

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值