【Python开发】lambda 最常用函数

lambda 指的是匿名函数,简单来说就是没有名字的函数,它在数据处理方面应用还是挺多的,至少能简化蛮多代码,比如一些内置函数(sorted、filter、map和reduce),本文主要讲这些内置函数如何搭配使用 lambda。

目录

1 lambda 语法

1.1 lambda 函数

1.2 定义 lambda 函数

① 变量定义 lambda 函数

② 函数定义 lambda 函数

③ 参数传递 lambda 函数

3 参数传递 lambda 函数/最常用

① map() 函数

② sorted() 函数

③ sort() 函数

④ reduce() 函数

⑤ filter() 函数


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]
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尹煜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值