Python中lambda匿名函数的用法(第6节)


1、lambda函数基本用法

在进行编程时,我们一般会给一个函数起一个名字,但又不想费神去命名它的时候,就可以使用匿名函数。该匿名函数就是Python中的Lambda函数,是一种快速定义简单函数的方法。例如:

动手练一练:

def sum(a, b):
    return a + b
print(sum(2, 3))  # 输出 5

print("-------这是虚线-------")

add = lambda a, b: a+b
print(add(4, 5))  # 输出 9

执行以上代码,输出结果为:

5
-------这是虚线-------
9

上面的例子中,sum函数的作用是返回两个参数“a”和“b”的和,改写成lambda表达式就是“lambda a, b: a+b”,与常规函数不同,Lambda函数没有函数名,我们将lambda函数赋值给变量add,通过变量add间接调用该lambda函数。

在Python中,Lambda函数的语法非常简单,它由关键字lambda开头,表示这是个lambda表达式。之后的内容由冒号“:”分为两部分:冒号“:”左边的是函数的参数,多个参数使用逗号分隔,在例子中就是“a”和“b”两个参数,与定义一般函数时括号中的参数类似。冒号“:”右边的就是要返回的值,lambda表达式不需要用“return”关键字返回内容,函数默认会返回冒号“:”右边的值。

2、Lambda函数的应用场景

lambda函数在Python编程中使用的频率非常高,通常用于需要快速定义简单函数的场景,例如:

  • (1)程序只执行一次,不需要定义函数名,使用lambda表达式方便定义,并且节省了内存中变量的定义;

  • (2)在某些函数中必须以函数作为参数,但是函数本身十分简单而且只在一处使用。

如果我们将lambda函数与filter()、map()和reduce()等高阶函数一起使用,那么程序将变得更加简便,下面以filter()方法为例:

动手练一练:

# 打印其中所有的奇数
# 首先定义一个列表a
a = [5, 8, 11, 56, 29, 43, 77, 104, 2024]

# 初级程序员方法
b = []
for n in a:
    if n % 2 == 1:
        b.append(n)  # append()函数用于在b列表末尾添加新的元素
print(b)  # 输出 [5, 11, 29, 43, 77]

print("-------这是虚线-------")

# 高级程序员方法
print(list(filter(lambda x: x % 2 == 1, a)))  # 输出 [5, 11, 29, 43, 77]

上面的例子中,给出一个列表“a”,使用两种方法打印其中所有的奇数,这个问题看起来很简单,但是使用lambda表达式只需要一行代码就可以做同样的事情。其中filter()函数可以用于对序列元素进行过滤,将a列表中符合条件的元素保留下来,从而得到一个新的序列,再使用list()函数来转换为列表。

lambda表达式还可以结合map函数使用,例如:

动手练一练:

# 初级程序员计算平方数
a = [1, 2, 3, 4, 5]
def square(x):
    return x ** 2
print(list(map(square, a)))   # 输出 [1, 4, 9, 16, 25]

print("-------这是虚线-------")

# 高级程序员计算平方数
print(list(map(lambda x: x ** 2, a)))   # 输出 [1, 4, 9, 16, 25]

执行以上代码,输出结果为:

[1, 4, 9, 16, 25]
-------这是虚线-------
[1, 4, 9, 16, 25]

上面的例子中,给出一个列表“a”,使用两种方法计算出列表中各个元素的平方,使用lambda表达式只需要一行代码就可以做同样的事情。其中map()函数用于遍历列表“a”中所有的元素,并分别以列表“a”中的每一个元素调用lambda函数,返回包含每次lambda函数返回值的新序列,再使用list()函数来转换为列表。