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