=分割线=
一、什么是匿名函数?
普通函数:需要起名字 ,用 def 定义。
匿名函数:不用起名字 ,临时用一下,用 lambda 关键字定义,一行写完。
适用场景:就简单一个计算逻辑,不想单独写一个 def 函数,省事。
二、语法格式(死记这一个就行)
lambda 参数: 表达式
拆解:
lambda:固定开头,代表匿名函数- 冒号前面:函数的参数(可以一个、多个、无参数)
- 冒号后面:只能写 1 个表达式 ,不用写
return,表达式结果自动返回
三、和普通函数对比,一眼看懂
普通有名函数
def f(x):
return x * x
等价的匿名函数
lambda x: x * x
意思:接收一个参数x,返回 x*x 的结果。
四、官方例子拆解
list(map(lambda x: x * x, [1,2,3,4,5]))
map:把后面列表里的每一个数,都丢进前面的函数处理lambda x:x*x:每个数自己乘自己- 结果:
[1,4,9,16,25]
五、匿名函数 3 种常用写法(记下来够用一辈子)
1. 一个参数
# 普通函数
def add1(x):
return x+1
# 匿名函数
lambda x: x+1
2. 两个参数
# 计算两数之和
lambda x,y: x + y
3. 没有参数
# 直接返回固定值
lambda: 100 + 200
六、匿名函数可以赋值给变量(当成普通函数用)
匿名函数没名字,但可以赋值给一个变量,后面直接调用:
# 把匿名函数存到变量f里
f = lambda x: x * x
# 像普通函数一样调用
print(f(5)) # 输出 25
七、课后练习:用匿名函数改造代码
原题代码(普通函数写法):
def is_odd(n):
return n % 2 == 1
L = list(filter(is_odd, range(1, 20)))
print(L)
(用 lambda 代替)
思路:
is_odd 作用是判断一个数是不是奇数:n % 2 == 1
直接把这个逻辑写成匿名函数塞进去就行:
# 直接用lambda,不用单独定义is_odd函数
L = list(filter(lambda n: n % 2 == 1, range(1, 20)))
print(L)
运行结果:[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
八、必记总结(只背这 4 句)
- 匿名函数用 lambda,不用 def、不用起名字。
- 格式:
lambda 参数: 表达式 - 只能写一个表达式,自动返回结果,不用写 return。
- 适合临时简单逻辑,搭配
map、filter用最方便。
=分割线=filter
1. 一句话定义
filter = 过滤器
作用:把符合条件的留下来,不符合的丢掉。
2. 语法格式
filter(函数, 可迭代对象)
拆解:
-
第一个参数:判断条件的函数(返回 True 或 False)
-
第二个参数:要过滤的一堆数据(列表、range 等)
-
规则:
函数返回
True
→ 留下
函数返回
False
→ 扔掉
=分割线=
练习题 1
写一个匿名函数,接收参数 x,返回 x * 2
lambda x:x*2
练习题 2
写一个匿名函数,接收两个参数 x, y,返回两数之和
lambda x,y : x+y`
练习题 3
写一个匿名函数,接收参数 x,返回 x 的平方再加 5
lambda x : (x*x)+5
练习题 4
写一个匿名函数,判断一个数是不是偶数,返回布尔值
lambda x:x%2==0
练习题 5
把下面普通函数,改写成 lambda 匿名函数
def calc(a):
return a + 10
lambda a : a+10