理解 匿名函数 基础
常规函数:
1 | def add(x): |
6
匿名函数
1 | print((lambda x: x + 1)(5)) |
6
匿名函数格式
lambda 参数1,参数1,参数1,…参数n : 表达式
应用场景:如果代码有很多重复,往往要将重复代码抽成一个方法函数,然后在需要的地方调用就可以了
有一种情况是:函数只用一次就不要了,这时候就可以使用匿名函数 lambda 上场,简化代码
一般函数传参:
1 | def add(x, y): |
3
匿名函数传参
添加 () 传参
1 | print((lambda x, y: x + y)(10, 20)) |
30
(1, 2)
这句代码的意思是说
遍历 0-9 这 10 个数字
然后把每个数逐个交给匿名函数处理
处理的方式就是 x % 2
最后将得到的结果放进列表里面
1 | my_list = [(lambda x: x % 2)(x) for x in range(10)] |
[0, 1, 0, 1, 0, 1, 0, 1, 0, 1]
所谓 “匿名”
说的就是这个函数没有定义名称
不再像我们之前使用自定义函数那样
还必要给函数起个名称
下面是使用传统函数实现以上方法,仔细看区别之处
使用匿名函数极大的简化了代码量,
使用匿名函数使程序主逻辑更清晰,但前提是:能理解匿名函数的实现功能细节
能否看懂别人写的匿名函数将是关键点,这一点与 Excel 中的公式相似
匿名函数:无名函数
传统函数:有名函数
1 | def get_list(n): |
[0, 1, 0, 1, 0, 1, 0, 1, 0, 1]
避免为了匿名而匿名,画蛇添足
像下面这样的代码
虽然定义了匿名函数,但还是返回来像传统有名函数那样调用,就应尽量避免
1 | add = (lambda x, y: x + y) |
3
匿名函数在啥时候用呢?
匿名函数在那些只需要执行一次就不要了的场景中使用
可以想到在函数式编程中将运用很广泛
结合 Python 中的 map() filter() 这两个函数高效使用
map() 函数
map(函数对象,序列)
map函数有两个参数
第一个可以传入 函数 , 第二个传入 序列
当执行这个 map 时,序列里面的每个值都会被取出,然后拿去执行传入的函数
map函数结合传统有名函数使用
1 | my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] |
[6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
map 函数结合匿名函数使用
1 | my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] |
[6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
filter() 函数
filter(函数对象,序列)
filter 中传入的函数对象一般用于判断
过滤判断提取出:一个列表中的数 %2 是等于 0 的数,
1 | print(list(filter((lambda x: x % 2 == 0), my_list))) |
[2, 4, 6, 8, 10]