一、lambda函数介绍

在Python中,有时候我们遇到一些函数,它们就像是躲在暗处的特工,不愿意透露自己的真实身份。这些神秘的函数就被称为“匿名函数”。它们不需要一个正式的名字,就像是没有名字的超级英雄一样。

为了在Python中表示这些匿名函数,我们使用了一个特殊的表达式,叫做lambda表达式。它的语法看起来有点像一道魔法咒语,但其实很简单。就像是在一场秘密会议中,我们需要用一种特殊的语言来和这些匿名函数进行交流。

lambda表达式的语法如下:

lambda 参数列表: lambda体

这里的参数就像是给匿名函数提供的一把钥匙,让它能够接收输入。而表达式则是匿名函数的秘密指令,告诉它该如何处理这些输入。

使用lambda表达式,我们可以在不定义具体函数的情况下,快速地创建一个小而强大的函数。就像是一把隐形的武器,它可以在需要的时候被调用,完成任务后又悄然离去。

所以,当你在Python中遇到一些不愿意透露身份的函数时,不要惊慌,也不要试图给它们起个名字。只需要使用lambda表达式,让它们在暗处默默发挥作用,就像是一位神秘的特工一样。

lambda是关键字声明,在lambda表达式中,“参数列表”与函数中的参数列表是一样的, 但不需要用小括号括起来,冒号后面是lambda体lambda 表达式的主要代码在lambda体处编写,类似于函数体。

提示:lambda体不能是一个代码块,不能包含多条语句,只能包含一条语句,该语句会计算一个结果返回给 lambda表达式,但与函数不同的是,不需要使用return语句返回。而且当使用函数作为参数的时候,lambda表达式非常有用,可以让代码简单,简洁。

二、lambda函数与def函数的区别

  • 1、lambda就像是一个速递小哥,可以立刻传递(无需变量),自动返回结果,就像你点外卖一样,不需要去取,直接送到你手上。

  • 2、lambda在内部只能包含一行代码,就像是一个小巧精致的小盒子,只能装一个东西,但是绝对能帮你解决问题。

  • 3、lambda是一个为编写简单的函数而设计的,就像是一个小助手,专门帮你处理一些小事情,而def则是用来处理更大的任务,就像是一个全能的管家。

  • 4、lambda可以定义一个匿名函数,就像是一个无名英雄,默默地为你服务,而def定义的函数必须有一个名字,就像是一个有名的明星,大家都知道他的名字。

lambda函数的优势

  • 1、对于单行函数,使用lambda表达式可以省去定义函数的过程,就像是直接点外卖,不需要自己动手做饭,让代码更加简洁,让你的代码像是一份精致的外卖菜单。

  • 2、对于不需要多次复用的函数,使用lambda表达式可以在用完之后立即释放,就像是吃完外卖后,外卖盒子可以立即扔掉,提高程序执行的性能,让你的代码像是一个高效的外卖小哥。

三、lambda函数案例

3.1 定义加法函数

# def函数写法
def add(a, b):
    return a + b


print(add(10, 20))
print("----------这是一个分割线----------")

# lambda函数写法
add_lambda = lambda a, b: a + b
print(add_lambda(10, 20))

输出结果:

30
----------这是一个分割线----------
30

3.2 使用if判断奇偶性

# def函数写法
def get_odd_even(x):
    if x % 2 == 0:
        return "偶数"
    else:
        return "奇数"


print(get_odd_even(10))
print("----------这是一个分割线----------")

# lambda函数写法
get_odd_even1 = lambda x: "偶数" if x % 2 == 0 else "奇数"
print(get_odd_even1(10))
print(get_odd_even1(9))

输出结果:

偶数
----------这是一个分割线----------
偶数
奇数

3.3 无参数表达式

# def函数写法
def test1():
    return "Python YYDS!!!"


print(test1())
print("----------这是一个分割线----------")

# lambda函数写法
test2 = lambda: "Python YYDS!!!"
print(test2())

输出结果:

Python YYDS!!!
----------这是一个分割线----------
Python YYDS!!!

3.4 列表排序

# 根据元组中第一个数排序
a = [(2, "小黑"), (5, "小白"), (1, "张三"), (4, "李四"), (3, "王五")]
a.sort(key=lambda x: x[0])

print(a)

输出结果:

[(1, '张三'), (2, '小黑'), (3, '王五'), (4, '李四'), (5, '小白')]

上面例子中,根据列表第一个元素对原本打乱的数据进行了排序,元组、字典同理都可以这样使用!

3.5 map方法混搭(常用)

非常常用的技巧——map方法的混搭!就像是在烹饪中,我们可以将各种食材进行巧妙的搭配,最终得到一道美味的佳肴一样,map方法的混搭也能让我们在Python的世界中,对序列中的每个元素进行操作,最终获得一个全新的序列!

想象一下,你手上有一堆水果,比如苹果、香蕉和橙子。你想把它们都削皮,然后放到一个新的篮子里。这时候,map方法就派上用场了!你可以使用map方法来遍历这个水果序列,对每个水果进行削皮操作,最后得到一个削皮后的水果序列。

让我们来看看具体的代码吧:

fruits = ['苹果', '香蕉', '橙子']

def peel_fruit(fruit):
    return '削皮的' + fruit

peeled_fruits = list(map(peel_fruit, fruits))

在这个例子中,我们定义了一个peel_fruit函数,它接受一个水果作为参数,并返回削皮后的水果。然后,我们使用map方法将peel_fruit函数应用到fruits序列的每个元素上,得到一个新的序列peeled_fruits

嘿,是不是很简单?map方法就像是一个魔法师,可以帮助我们对序列中的每个元素进行操作,而不需要我们一个个手动去处理。这样,我们就能够更加高效地处理大量的数据,节省时间和精力。

所以,小伙伴们,记住,当你需要对序列中的每个元素进行操作时,不妨尝试一下map方法的混搭!它会让你的代码更加简洁、优雅,让你的编程之路更加畅通无阻!

加油,写出更酷炫的代码吧!🚀🚀🚀

# def函数写法
def add(num):
    return num ** 2


x = map(add, [1, 2, 3, 4, 5])
print(list(x))
print("----------这是一个分割线----------")

# lambda函数写法
y = map(lambda num: num ** 2, [1, 2, 3, 4, 5])
print(list(y))

输出结果:

[1, 4, 9, 16, 25]
----------这是一个分割线----------
[1, 4, 9, 16, 25]

上面例子中,map函数第一个参数是一个lambda表达式,输入一个参数,返回元素的平方。第二个就是需要作用的对象,此处是一个列表。Python3中map返回一个map对象,我们需要人工转为list,得到的结果就是[1, 4, 9, 16, 25]

3.6 筛选大师:filter方法混搭(超级常用)

超级常用的方法——filter方法混搭!这个方法就像是一个筛选大师,可以帮助我们从序列中找出符合条件的元素。

想象一下,你有一个装满了各种水果的篮子。但是你只想要红色的水果,比如苹果和草莓。这时候,filter方法就派上用场了!它会帮你筛选出篮子里所有红色的水果,让你轻松获得一个只有红色水果的篮子。

在Python中,我们可以使用filter方法来实现这个功能。只需要传入一个函数和一个序列,filter方法就会根据函数的返回值来筛选出符合条件的元素,最终返回一个新的序列。

让我们来看一个例子吧:

fruits = ['apple', 'banana', 'cherry', 'strawberry']
red_fruits = filter(lambda fruit: fruit.startswith('a') or fruit.startswith('s'), fruits)
print(list(red_fruits))

这段代码会输出['apple', 'strawberry'],因为只有苹果和草莓是以字母'a'或字母's'开头的。

所以,小伙伴们,filter方法混搭是一个非常实用的工具,可以帮助我们轻松筛选出符合条件的元素。

x = filter(lambda num: num % 2 == 0, range(10))
print(list(x))

# [0, 2, 4, 6, 8]`

上面例子中,定义lambda表达式,筛选为偶数的元素,结果为[0, 2, 4, 6, 8]。

3.7 reduce方法混搭(常用)

对序列内所有元素进行累计操作;Python3中删掉了全局的reduce函数,需要从functools引入

from functools import reduce

list1 = [1, 2, 3, 4, 5]
list2 = reduce(lambda x, y: x + y, list1)
print(list2)  # 15

reduce 中使用的 lambda表达式需要两个参数,reduce函数共三个参数,第一个是就是lambda表达式,第二个是要累计的序列,第三个是初始值,我们没给初始值,那么开始操作的两个元素就是序列的前两个。否则将使用我们给出的初始值和序列第一个元素操作,然后结果再与第三个元素操作,以此类推。上个例子结果是15

四、lambda函数总结

1、lambda就像是一个迷你版的函数,比def简单很多,就像是一口小巧玲珑的小笼包,外表虽小,但内里却包含了丰富的味道。

2、lambda的主体是一个表达式,就像是一个小小的魔法盒,里面只能封装有限的逻辑,但却能带来意想不到的效果。

3、lambda函数拥有自己的名字空间,就像是一个小岛,它与外界隔绝,只能访问自己的参数,无法触及其他参数的领域。

4、简单的单行代码或者一次性的函数可以用lambda函数来书写,就像是一张便利贴,能够让代码更加简洁、精炼。

5、但对于复杂函数或者函数体体量大的函数,最好不要用lambda函数,就像是一本密密麻麻的编码手册,会增加代码的阅读难度,让人摸不着头脑。

6、在非多次调用的函数的情况下,lambda表达式即用既得,就像是一次性的纸杯,使用完毕后可以立即丢弃,提高了性能的效率。

所以,lambda函数就像是一把小巧灵活的工具,能够在适当的场合发挥出强大的作用,让我们的代码更加简洁、优雅!