【python】匿名函数

在Python中,匿名函数(也称为lambda函数)是使用lambda关键字定义的小型匿名函数。它们主要用于需要一个函数作为参数的简单函数式编程场景,如map()filter()reduce()等函数。

目录

一、Lambda函数的定义

二、Lambda函数的用途

三、举例说明

1、计算两个数的和:

2、筛选列表中的偶数:

3、将列表中的每个元素平方:

4、对列表进行排序,按照字符串长度:

四、Lambda函数与传统定义函数的对比

1、Lambda函数:

2、传统定义函数:

3、注意事项


一、Lambda函数的定义

Lambda函数的定义语法如下:

lambda arguments: expression
  • arguments: 是函数的参数列表,与正常函数定义类似,但不需要括号。
  • expression: 是一个表达式,它会被计算并返回结果。这个表达式不能包含复杂的语句,如for循环或if语句(虽然可以使用三元运算符)。

二、Lambda函数的用途

Lambda函数主要用于简单的、一行的函数定义,它们通常用于:

  • 在不需要多次调用的小范围内快速定义函数。
  • 作为参数传递给其他函数(如map()filter()reduce()等)。

敲黑板:怎么理解“作为参数传递给其他函数”?看如下示例。

# 定义一个接受一个函数和一个列表作为参数的函数  
def apply_function_to_list(func, list_to_apply):  
    """  
    将一个给定的函数应用到列表中的每个元素,并返回一个新的列表。  
  
    参数:  
        func (callable): 需要应用到列表每个元素的函数。  
        list_to_apply (list): 需要应用函数的列表。  
  
    返回:  
        list: 包含将函数应用到每个元素后结果的新列表。  
    """  
    # 使用列表推导式遍历 list_to_apply 中的每一个元素 item  
    # 对每个 item 应用 func 函数,并将结果收集到一个新的列表中  
    return [func(item) for item in list_to_apply]  
  
# 使用 lambda 函数(匿名函数)作为参数  
# 这个 lambda 函数接受一个参数 x,并返回 x 的两倍  
# 将这个 lambda 函数和列表 [1, 2, 3, 4, 5] 作为参数传递给 
# apply_function_to_list 函数  
result = apply_function_to_list(lambda x: x * 2, [1, 2, 3, 4, 5])  
  
# 打印结果,应输出: [2, 4, 6, 8, 10]  
print(result)  

匿名函数的主要优点是它们的简洁性和灵活性。它们允许你快速定义一个小的函数片段,而无需为其命名或创建完整的函数定义。这使得它们特别适用于需要快速定义简单函数并将其作为参数传递的场景。

三、举例说明

1、计算两个数的和

#正常的加法函数可能是这样子的
def add(x, y):
    return x + y
result = add(5, 3)  #调用,用结果为 8

# 匿名函数
add = lambda x, y: x + y    
result = add(5, 3)  #调用匿名函数,用结果为 8

#这里,lambda x, y: x + y 就是一个匿名函数,它接受两个参数 x 和 y,然后返回它们的和。
#我们可以直接将这个匿名函数赋值给一个变量add,然后就可以像普通函数一样使用它了。


2、筛选列表中的偶数

# 创建一个包含整数的列表  
numbers = [1, 2, 3, 4, 5, 6]  
# 使用 filter 函数和 lambda 匿名函数从 numbers 列表中筛选出偶数  
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))  
# 输出结果应为 [2, 4, 6],即 numbers 列表中的偶数  
print(even_numbers)  # 输出: [2, 4, 6]
  • filter 函数接受两个参数:第一个参数是一个函数,第二个参数是一个可迭代对象(例如列表)  
  • filter 函数会遍历可迭代对象中的每一个元素,并将这些元素作为参数传递给第一个函数  
  • 如果第一个函数对某个元素返回 True,则 filter 会“保留”这个元素;如果返回 False,则不会保留  
  • filter 函数的结果是一个迭代器,所以我们需要使用 list 函数将其转换为列表  

3、将列表中的每个元素平方

numbers = [1, 2, 3, 4, 5]  
squared = list(map(lambda x: x**2, numbers))  # 结果为 [1, 4, 9, 16, 25]
  • map 是 Python 的内置函数,它接受两个参数:第一个参数是一个函数,第二个参数是一个可迭代对象(如列表、元组等)。
  • map 函数会遍历 numbers 列表中的每一个元素,并将这些元素作为参数传递给 lambda 函数。
  • lambda 函数会对每个元素进行平方运算,然后 map 函数返回一个新的迭代器,该迭代器包含了 numbers 列表中每个元素的平方。
  • map 函数的结果是一个迭代器,所以我们需要使用 list 函数将其转换为列表  

4、对列表进行排序,按照字符串长度

words = ["apple", "banana", "cherry", "date"]  
sorted_words = sorted(words, key=lambda word: len(word))  # 结果为 ['date', 'apple', 'cherry', 'banana']
  • sorted 函数是 Python 的内置函数,用于对可迭代对象(如列表、元组等)进行排序。它返回一个新的已排序的列表,而原始列表保持不变。
  • sorted 函数有一个 key 参数,该参数接受一个函数作为值。这个函数应用于输入列表中的每个元素,并返回一个用于排序的值。在这个例子中,我们使用了 lambda 表达式来定义一个匿名函数,该函数接受一个单词作为输入,并返回该单词的长度(即 len(word))。
  • 最后,sorted 函数会根据这些长度值对单词进行排序。

四、Lambda函数与传统定义函数的对比

1、Lambda函数

  • 适用于简单的、一行的函数定义。
  • 匿名,适合用于一些临时性的操作。
  • 主要用于函数式编程场景。

题外话:常见的内置高阶函数

  • map():对可迭代对象中的每一个元素应用一个函数,并返回一个新的迭代器,其中包含应用函数后的结果。
  • filter():对可迭代对象中的每一个元素进行判断,返回一个迭代器,其中包含使函数返回True的元素。
  • reduce():对可迭代对象的元素进行累积操作,即函数对序列的第一个和第二个元素执行操作,然后用结果和第三个元素执行操作,依此类推。
  • sorted():对可迭代对象进行排序,并返回一个新的已排序的列表。

2、传统定义函数

  • 适用于复杂的、多行的函数定义。
  • 命名明确,可以多次调用。
  • 适用于多种编程场景。

3、注意事项

  • 尽量避免在复杂逻辑中使用Lambda函数,因为这会降低代码的可读性。
  • 当Lambda函数变得复杂时,考虑使用传统定义函数的方式。
  • Lambda函数主要用于短小的、一次性的函数定义,如回调函数等。

相关推荐

  1. Python——lambda匿名函数

    2024-06-06 22:00:02       59 阅读
  2. python匿名函数

    2024-06-06 22:00:02       33 阅读
  3. python匿名函数

    2024-06-06 22:00:02       30 阅读
  4. Python基础】Lambda匿名函数

    2024-06-06 22:00:02       33 阅读
  5. python的lambda匿名函数

    2024-06-06 22:00:02       27 阅读
  6. Python:匿名函数lambda用法

    2024-06-06 22:00:02       33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-06 22:00:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-06 22:00:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-06 22:00:02       82 阅读
  4. Python语言-面向对象

    2024-06-06 22:00:02       91 阅读

热门阅读

  1. 东方博宜1542 - 小X算排名

    2024-06-06 22:00:02       25 阅读
  2. CSS中绝对定位和百分比问题(CSS中的小细节)

    2024-06-06 22:00:02       30 阅读
  3. CSS变量 -- var() 使用教程

    2024-06-06 22:00:02       23 阅读
  4. CSS简述(1)

    2024-06-06 22:00:02       23 阅读
  5. 9. 媒体查询与响应式设计

    2024-06-06 22:00:02       29 阅读
  6. 网络安全中攻击溯源方法

    2024-06-06 22:00:02       27 阅读
  7. Ant-Design-Vue动态表头并填充数据

    2024-06-06 22:00:02       29 阅读
  8. Unreal Engine游戏引擎小白入门指南

    2024-06-06 22:00:02       31 阅读
  9. SQL常用语句--模糊查询LIKE

    2024-06-06 22:00:02       31 阅读
  10. 一篇想要成为Python编程大佬,看这篇就够了

    2024-06-06 22:00:02       35 阅读
  11. 通过Slf4j中的MDC实现在日志中添加用户IP功能

    2024-06-06 22:00:02       31 阅读
  12. BOOT ISO和DVD ISO的区别

    2024-06-06 22:00:02       30 阅读
  13. nacos增加修改配置实时生效

    2024-06-06 22:00:02       31 阅读
  14. redis集群

    2024-06-06 22:00:02       31 阅读
  15. VOJ 圣诞树 题解 最短路径 dijkstra算法

    2024-06-06 22:00:02       32 阅读