lambda 指的是匿名函数,简单来说就是没有名字的函数,它在数据处理方面应用还是挺多的,至少能简化蛮多代码,比如一些内置函数(sorted、filter、map和reduce),本文主要讲这些内置函数如何搭配使用 lambda。
目录
1 lambda 语法
1.1 lambda 函数
lambda 函数语法表现形式如下:
lambda [arg1 [,arg2,.....argn]]:expression
- lambda 是 Python 预留的关键字,[arg…] 和 expression 由用户自定义。
- [arg…] 是参数列表,如 a, b、a=1, b=2、*args、**kwargs a, b=1, *args 等等。
- expression 是一个参数表达式,表达式中出现的参数需要在[arg......]中有定义,如1
None、a + b、sum(a)、1 if a >10 else 0 等等。
1.2 定义 lambda 函数
lambda 函数主要可分为以下三种应用场景:
① 变量定义 lambda 函数
如:minus = lambda x, y: x - y
相当于把变量定义了一个减法函数,这是我们通过 minus(3,1) 执行该函数,即可得到结果为 2。该变量此时可将其当成普通函数看待,入参分别为 x 和 y。
② 函数定义 lambda 函数
也可将其他函数定义成 lambda 函数,那么此时该函数将被 lambda 函数替换。
如:time.sleep = lambda x : x * 2
此时通过 time.sleep(3) 执行该函数,他将不会执行睡眠 3 秒的操作,而是会返回 6。
如:math.pow = lambda x, y: x - y
此时通过 math.pow(3,2) 执行该函数,他将不会返回 9(3 的二次方),而是会返回 2。
有时遇到需要修改函数过程的时候,不妨使用这个方式~
③ 参数传递 lambda 函数
以下几种内置函数即可使用该方式。
总的来说,如果一个函数有一个返回值,并且只有一句代码,可以使用 lambda 简化!如果需要进行复杂的排序操作,还是使用自定义函数来替代 lambda 函数。
3 参数传递 lambda 函数/最常用
① map() 函数
📌 介绍
用于对可迭代对象(如列表、元组、集合等)中的每个元素都执行一个指定的操作,然后返回一个新的可迭代对象,其中包含经过处理后的所有元素。
📌 语法
map(function, iterable, ...)
📌 参数
- function 是一个函数或可调用对象,它接收一个参数,并对其进行处理;
- iterable 是一个可迭代对象,包含需要进行处理的元素;
- ... 表示可以有多个 iterable 参数,但 function 只接收一个参数。
map() 函数会对 iterable 中的每个元素都调用 function 函数,并将其返回值放入一个新的可迭代对象中。返回的可迭代对象可以通过 list()、tuple() 等函数转换为列表、元组等类型。
如:
numbers = [1, 2, 3, 4, 5]
#使用 lambda 表达式定义了一个匿名函数,该函数接收一个参数 x,并返回 x 的平方
squares = map(lambda x: x ** 2, numbers)
print(list(squares)) # 输出 [1, 4, 9, 16, 25]
② sorted() 函数
sorted() 是 Python 内置函数之一,用于对序列进行排序。
📌 语法
sorted(iterable, key=None, reverse=False)
📌 参数
- iterable 表示要排序的可迭代对象,如列表、元组等;
- key 是一个函数,用于指定排序时的比较规则,默认为 None,表示使用默认的比较规则;
- reverse 表示是否要进行降序排列,默认为 False,表示升序排列。
sorted() 函数会返回一个新的排序后的列表,原来的序列不会被修改。
如:
# ===========一般用法:===========
a = [3, 1, 4, 2]
print(sorted(a)) # 输出 [1, 2, 3, 4]
# ===========lambda函数用法:===========
b = [('b', 2), ('a', 1), ('c', 3), ('d', 4)]
print(sorted(b, key=lambda x: x[1])) # 输出[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
c = [['b', 2], ['a', 1], ['c', 3], ['d', 4]]
print(sorted(c, key=lambda x: x[1])) # 输出[['a', 1], ['b', 2], ['c', 3], ['d', 4]]
③ sort() 函数
sort() 函数是用来对列表进行排序的函数,它可以按照升序或者降序的方式对列表进行排序。他和sorted() 函数本质上是不一样的,sorted() 函数用于可迭代对象,而 sort() 则是 list 的一个方法。
sort()函数有两个可选参数,分别是reverse和key。其中reverse参数表示是否逆序排序,它的默认值为False,表示升序排序;而key参数表示排序时所用的比较函数,它的默认值为None,表示使用默认的比较函数。
sort()函数会直接修改原列表的顺序,而不是返回一个新的排序后的列表。
如:
# ===========一般用法:===========
list1 = [5, 2, 8, 1, 6]
list1.sort() # 对列表进行升序排序
print(list1) # 输出 [1, 2, 5, 6, 8]
# ===========lambda函数用法:===========
list2 = [['apple', 2], ['banana', 1], ['orange', 3], ['pear', 4]]
list2.sort(reverse=True, key=lambda x: x[1]) # 对列表进行降序排序
print(list2) # 输出 [['pear', 4], ['orange', 3], ['apple', 2], ['banana', 1]]
④ reduce() 函数
用于对一个序列进行归约操作,reduce() 函数接收两个参数:一个函数和一个可迭代对象(例如,列表、元组等)。该函数会对可迭代对象进行遍历,每次将前面的结果与下一个元素传递给该函数,最终得到一个单一的结果。
📌 语法
reduce(function, iterable[, initializer])
📌 参数
- function 是一个带有两个参数的函数,第一个参数为前一次的结果,第二个参数为当前的元素。
- iterable 则是一个可迭代对象,例如列表或元组。
- initializer 是可选的,如果提供了,则作为初始值传递给函数;如果没有提供,则将使用可迭代对象中的第一个元素作为初始值。
返回函数计算结果。
如:
from functools import reduce
list = [1, 2, 3, 4, 5]
sum = reduce(lambda x, y: x + y, list)
print(sum) # 输出 15
⑤ filter() 函数
它接受一个函数和一个可迭代对象作为参数,过滤出可迭代对象中符合条件的元素并返回一个新的可迭代对象。
📌 语法
filter(function, iterable)
📌 参数
- function 参数是一个函数,用于定义过滤条件,
- iterable 参数是一个可迭代对象,表示需要过滤的序列。
function 函数的返回值通常是一个布尔值。当传入 filter() 函数的元素经过 function 函数处理后返回 True 时,该元素就会被保留到结果集中,否则将被过滤掉。
如:
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
result = filter(lambda x: x % 2 == 0, numbers)
print(list(result)) # 输出 [2, 4, 6, 8, 10]