Python中的Lambda(匿名函数)

    科技2025-06-18  18

    Lambda表达式是Python中一类特殊的定义函数的形式,使用它可以定义一个匿名函数。与其它语言不同,PythonLambda表达式的函数体只能有单独的一条语句,也就是返回值表达式语句。其语法如下:

    Lambda 形参列表 : 函数返回值表达式语句

    其通常利用map函数进行映射,如下:

    map(lambda n:n*n, [y for y in rang(10)])

    在编写代码过程中,如果需要一个函数,但是这个函数并不是很重要,那么就可以使用匿名函数,例如上面的代码中,将list中的元素自加。如果使用正常做法,写法如下:

    def sq(n):     return n * n map(sq, [y for y in range(10)])

    这样子会多定义一个add函数,特别是如果只使用一次,不仅不便于读代码,更造成了命名的浪费。如果在某处就真的只需要一个能做一件事情的函数而已,连它叫什么名字都无关紧要。Lambda 表达式就可以用来做这件事。

    Lambda还可以拥有多个参数,如下:

    lambda x,w:x*w, input,weight

    需要注意的是匿名函数只有一个表达式,不需要写return,返回值就是表达式的结果。

    Lambda函数主要和mapreduce函数,filter函数,sorted函数连用。

    1. map()函数接收两个参数,一个是函数,一个是Iterator,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。遍历序列,对序列中每个元素进行函数操作,最终获取新的序列。

    #求列表[1,2,3,4,5,6,7,8,9],返回一个n*n 的列表 #一般解决方案 li = [1,2,3,4,5,6,7,8,9] for ind,val in enumerate(li): li[ind] = val * val print(li) # [1, 4, 9, 16, 25, 36, 49, 64, 81] # 高级解决方案 li = [1,2,3,4,5,6,7,8,9] print(list(map(lambda x:x*x,li))) # [1, 4, 9, 16, 25, 36, 49, 64, 81]

    2.reduce()把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:

    reduce(func,[1,2,3]) 等同于 func(func(1,2),3)

    对于序列内所有元素进行累计操作,如下图所示:

    #接受一个list并利用reduce()求积 from functools import reduce li = [1,2,3,4,5,6,7,8,9] print(reduce(lambda x,y:x * y,li)) # 结果=1*2*3*4*5*6*7*8*9 = 362880

    3.filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。对于序列中的元素进行筛选,最终获取符合条件的序列。

    # 在一个list中,删掉偶数,只保留奇数 li = [1, 2, 4, 5, 6, 9, 10, 15] print(list(filter(lambda x:x % 2==1,li))) # [1, 5, 9, 15] # 回数是指从左向右读和从右向左读都是一样的数,例如12321,909。请利用filter()筛选出回数 li = list(range(1, 200)) print(list(filter(lambda x:int(str(x))==int(str(x)[::-1]),li))) [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55, 66, 77, 88, 99, 101, 111, 121, 131, 141, 151, 161, 171, 181, 191]

    4.sorted(iterable, /, *, key=None, reverse=False),接收一个key函数来实现对可迭代对象进行自定义的排序

    可迭代对象:主要与列表,字符串,元祖,集合和字典

    key:接受一个函数,根据此函数返回的结果,进行排序

    reverse:排序方向,默认为从小到大,reverse=True为逆向

    # 对列表按照绝对值进行排序 li= [-21, -12, 5, 9, 36] print(sorted(li, key = lambda x:abs(x))) # [5, 9, -12, -21, 36] """ sorted()函数按照keys进行排序,并按照对应关系返回list相应的元素: keys排序结果 => [5, 9, 12, 21, 36] | | | | | 最终结果 => [5, 9, -12, -21, 36] """ # 把下面单词以首字母排序 li = ['bad', 'about', 'Zoo', 'Credit'] print(sorted(li, key = lambda x : x[0])) # 输出['Credit', 'Zoo', 'about', 'bad'] """ 对字符串排序,是按照ASCII的大小比较的,由于'Z' < 'a',结果,大写字母Z会排在小写字母a的前面。 """ # 假设我们用一组tuple表示学生名字和成绩: L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)] # 请用sorted()对上述列表分别按名字排序 print(sorted(L, key = lambda x : x[0])) # 输出[('Adam', 92), ('Bart', 66), ('Bob', 75), ('Lisa', 88)] # 再按成绩从高到低排序 print(sorted(L, key = lambda x : x[1], reverse=True)) # 输出[('Adam', 92), ('Lisa', 88), ('Bob', 75), ('Bart', 66)]

    参考链接:

    https://www.cnblogs.com/xiao-apple36/p/8577727.html

    https://www.zhihu.com/question/20125256

    Processed: 0.009, SQL: 8