背景介绍
- 整理面试题,开始刷题【python】【测试】【测开】相关。
解决方案
- 人无我有,人有我精
面试题02:Lambda函数是什么,举例说明的它的应用场景。
点评:这个题目主要想考察的是Lambda函数的应用场景,潜台词是问你在项目中有没有使用过Lambda函数,具体在什么场景下会用到Lambda函数,借此来判断你写代码的能力。因为Lambda函数通常用在高阶函数中,主要的作用是通过向函数传入函数或让函数返回函数最终实现代码的解耦合。
Lambda函数也叫匿名函数
它是功能简单用一行代码就能实现的小型函数。
- Python中的Lambda函数只能写一个表达式,这个表达式的执行结果就是函数的返回值,不用写return关键字。
- Lambda函数因为没有名字,所以也不会跟其他函数发生命名冲突的问题。
实操【可能会让你手写的】
python一行流,用一行代码实现:将一个列表里的每个元素都平方。
为了作比较,我们先用常规方法写一个
代码语言:javascript复制def sq(x):
return x*x
map(sq,[y for y in range(10)])
再用lambda函数来编写代码
代码语言:javascript复制map(lambda x: x*x,[y for y in range(10)])
从这个简单的例子,我们可以看出,用lambda函数首先减少了代码的冗余,其次,用lambda函数,不用费神地去命名一个函数的名字,可以快速的实现某项功能,最后,lambda函数使代码的可读性更强,程序看起来更加简洁。
用一行代码实现求阶乘的函数
代码语言:javascript复制jc = lambda x: __import__('functools').reduce(int.__mul__, range(1, x 1), 1)
用一行代码实现求最大公约数的函数等。
代码语言:javascript复制gys = lambda x, y: y % x and gcd(y % x, x) or x
进阶
Lambda函数其实最为主要的用途是把一个函数传入另一个高阶函数(如Python内置的filter、map等)中来为函数做解耦合,增强函数的灵活性和通用性。
下面的例子通过使用filter和map函数,实现了从列表中筛选出奇数并求平方构成新列表的操作,因为用到了高阶函数,过滤和映射数据的规则都是函数的调用者通过另外一个函数传入的,因此这filter和map函数没有跟特定的过滤和映射数据的规则耦合在一起。
代码语言:javascript复制items = [12, 5, 7, 10, 8, 19]
items = list(map(lambda x: x ** 2, filter(lambda x: x % 2, items)))
print(items) # [25, 49, 361]
再次进阶
优化上面的代码:用列表的生成式来实现
代码语言:javascript复制items = [12, 5, 7, 10, 8, 19]
items = [x ** 2 for x in items if x % 2]
print(items) # [25, 49, 361]