CodeGym /课程 /Python SELF ZH /Lambda 表达式

Lambda 表达式

Python SELF ZH
第 13 级 , 课程 2
可用

2.1 定义 lambda 函数

lambda 函数,也被称为 匿名函数,是 没有名字的简短单行函数,可以通过 lambda 关键字创建。

不同于用 def 定义的普通函数,lambda 函数是即兴创建的,通常用于可以在一行中完成的简单操作。

lambda 函数的语法由 lambda 关键字、后接的参数、冒号和表达式组成:

 
lambda 参数: 表达式
    

lambda 函数可以接受任意数量的参数,但只能包含 一个表达式。该表达式的值会自动返回。

例子:

lambda 函数 普通函数

square = lambda x: x ** 2
print(square(5))  # 输出: 25
                    

def square(x):
    return x ** 2
print(square(5))  # 输出: 25
                

sum = lambda a, b: a + b
            

def sum(a, b):
    return a + b
                

up = lambda s: s.upper()
            

def up(s):
    return s.upper()
                    

2.2 lambda 函数的应用

lambda 函数经常与其他函数合用,比如 map()filter()sorted(),还可以作为其他函数的参数。

map() 一起使用

map() 函数将指定函数应用于可迭代对象的每个元素,并返回结果的迭代器。lambda 函数非常适合与 map() 一起使用,因为它们可以简洁地定义转换元素的函数。


numbers = [1, 2, 3, 4, 5]
squared_numbers = list(map(lambda x: x ** 2, numbers))
print(squared_numbers)  # 输出: [1, 4, 9, 16, 25]
        

filter() 一起使用

filter() 函数返回一个迭代器,包含可迭代对象中令指定函数返回 True 的元素。lambda 函数允许快速定义过滤条件。


numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)  # 输出: [2, 4, 6, 8, 10]

sorted() 一起使用

sorted() 函数对可迭代对象的元素进行排序。lambda 函数可以用于通过 key 参数定义自定义排序标准。


words = ["banana", "apple", "cherry", "date"]
sorted_words = sorted(words, key=lambda x: len(x))
print(sorted_words)  # 输出: ['date', 'apple', 'banana', 'cherry']
        

在表达式中使用 lambda 函数

lambda 函数可以用在其他表达式中,比如列表表达式和字典生成器。


pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
pairs.sort(key=lambda pair: pair[1])
print(pairs)  # 输出: [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]
        

2.3 lambda 函数的限制

lambda 函数相比普通函数有几个限制:

表达式有限制:

lambda 函数只能包含一个表达式,不能用复杂的语句,比如循环或控制流语句(如 ifelse 等)。

没有文档字符串:

lambda 函数不能包含文档字符串(docstring),这使得记录其功能变得困难。

调试能力有限:

由于没有名字和文档,lambda 函数比普通函数更难调试。

lambda 函数限制的例子

在 lambda 函数中尝试使用多个表达式会导致语法错误:


# 这段代码会引发错误
invalid_lambda = lambda x: x ** 2; print(x)
        
    
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION