函数进阶5.6匿名函数
一、是什么
匿名函数:没有名字的函数,在Python中用lambda
定义
示例
lambda x, y: x + y # 定义了一个匿名函数 1.没有名字 2.完成2个数的加法操作
二、做什么
- 可以用一行代码完成简单的函数定义
- 可以当做实参快速传递到函数中去
三、怎样用
用lambda
关键词能匿名函数。这种函数得名于省略了用def
声明函数的标准步骤
1. 格式
lambda
函数的语法只包含一个语句,如下:
lambda 形参1, 形参2, 形参3: 表达式
2. 注意
lambda
函数能接收任何数量的参数但只能返回一个表达式的值,其默认就是返回的,不用写return
3. 使用方式
既然我们已经知道def
定义函数时的变量存储的是函数的引用,所以只要有了这个函数的引用,也就可以通过变量名()
的方式调用函数
而,函数分为def
定义的普通函数,和用lambda
定义的匿名函数,所以无论一个变量例如b
保存的是普通函数的引用,还是匿名函数的引用,都可以用b()
方式调用b指向的函数
一般情况下对匿名函数的使用有2种方式
- 通过
lambda
定义匿名函数,然后用一个变量指向这个匿名函数,然后通过变量名()
调用这个匿名函数 - 直接在调用其它函数实参的位置通过
lambda
定义匿名函数,会将这个匿名函数的引用当做实参进行传递
方式1示例:
# 定义了一个匿名函数,然后让变量add_2_nums指向它 add_2_nums = lambda x, y: x + y # 调用add_2_nums指向的匿名函数 print("10+20=" % add_2_nums(10, 20))
以上实例输出结果:
0+20=30
方式2示例:
def fun(a, b, opt): print("a = %d" % a) print("b = %d" % b) print("result = %d" % opt(a, b)) # 此时opt指向了第7行定义的匿名函数,所以opt(a, b)就相当于调用匿名函数 fun(1, 2, lambda x, y: x + y) # 定义一个匿名函数,且将它的引用当做实参进行传递
四、案例
想一想,下面的数据如何指定按age
或name
排序?
stus = [ {"name": "wanglaoshi", "age": 18}, {"name": "donglaoshi", "age": 19}, {"name": "dong4716138", "age": 17} ]
按name排序:
stus = [ {"name": "wanglaoshi", "age": 18}, {"name": "donglaoshi", "age": 19}, {"name": "abc", "age": 17} ] print("排序前,stus=", stus) stus.sort(key=lambda x: x['name']) print("排序后,stus=", stus)
按age排序:
stus = [ {"name": "wanglaoshi", "age": 18}, {"name": "donglaoshi", "age": 19}, {"name": "abc", "age": 17} ] print("排序前,stus=", stus) stus.sort(key=lambda x: x['age']) print("排序后,stus=", stus)
说明