Python笔记:lambda匿名函数

本文介绍了Python中的lambda匿名函数,包括其语法和与def函数的区别。同时,通过实例展示了lambda如何与filter()、map()和reduce()函数结合使用,以实现数据处理和简化代码。此外,还探讨了这些函数在列表推导式中的应用。
摘要由CSDN通过智能技术生成

在Python中,一般使用def关键字来定义普通函数。顾名思义,匿名函数意味着函数没有名称,Python中使用lambda关键字定义匿名函数。在某些情况下,使用匿名函数可以简化代码,提高代码的可读性。本文介绍python匿名函数的使用方法。

匿名函数

Python匿名函数的语法格式:

lambda argument1, argument2,... argumentN: expression

匿名函数可以有多个参数,只有一个表达式。下面来看一下普通def函数和lambda函数的区别:

def cube(y):
    return y*y*y

lambda_cube = lambda y: y*y*y

print(cube(3))
print(lambda_cube(3))

执行结果:

27
27

可以看到,lambda函数更加简洁,不包含“return”语句,返回的是一个函数对象。与常规函数还有以下区别:

1、lambda 是一个表达式,不是一个语句

  • 表达式(expression)是用“公式”去表达一个东西,比如y*y*y就是一个表达式

  • 语句(statement)是完成了某些功能,比如赋值语句,条件语句等

  • 由于lambda 是表达式,它可以用在一些常规函数 def 不能用的地方,比如,可以用在列表内部,可以作为某些函数的参数。

lambda 函数在列表推导式中使用:

list_num = [3, 4, 6, 2, 5, 8]
list_square = [x ** 2 for x in list_num if x % 2 == 0]
list_square2 = [(lambda x: x** 2)(x) for x in list_num if x % 2 == 0]
print(list_square)
print(list_square2)

执行结果:

[16, 36, 4, 64]
[16, 36, 4, 64]

作为函数的参数:根据字典值降序排序

mydict = {1:"apple",3:"banana",2:"orange"}
mydict = sorted(mydict.items(), key=lambda x: x[0], reverse=True)
print(mydict)

执行结果:

[(3, 'banana'), (2, 'orange'), (1, 'apple')]

2、lambda表达式只有一行,不能写成多行的代码块。

lambda 用于快速编写简单函数,对于更复杂的多行逻辑使用常规函数来实现。关于这点,Python 之父 Guido van Rossum 曾发了一篇文章解释:Language Design Is Not Just Solving Puzzles

Lambda函数具有函数式编程的特性,关于函数式编程这里不做介绍,后面有时间单独写一篇文章。Lambda函数可以与filter()、map()和reduce()等内置函数一起使用,下面介绍使用方法。

filter()函数

Python中的filter()函数接受一个函数对象和一个可迭代对象作为参数。

filter(function or None, iterable)

filter()函数对iterable中的每个元素都进行 function 判断,并返回 True 或者 False,最后将返回 True 的元素组成一个新的可遍历的集合。

list_num = [3, 4, 6, 2, 5, 8]

list_even = list(filter(lambda x: x % 2 == 0, list_num))
print(list_even)

list_even2 = [i for i in list_num if i % 2 == 0]
print(list_even2)

list_even3 = []
for i in list_num:
    if i % 2 == 0:
        list_even3.append(i)
print(list_even3)

执行结果:

[4, 6, 2, 8]
[4, 6, 2, 8]
[4, 6, 2, 8]

如果是None,可用于过滤空格,返回为true的可遍历集合:

list1 = ['', None, 6, 2, False, 8, True]
list1 = list(filter(None, list1))
print(list1)

执行结果:

[6, 2, 8, True]

map() 函数

和filter()类似,map(function, iterable) 函数表示对 iterable 中的每个元素,都运用 function 这个函数,最后返回一个新的可遍历的集合:

list_num = [3, 4, 6, 2, 5, 8]
list_square = list(map(lambda x: x**2, list_num))
print(list_square)

list_num = [3, 4, 6, 2, 5, 8]
list_square2 = [(lambda x: x** 2)(x) for x in list_num]
print(list_square2)

list_square3 = [x**2 for x in list_num]
print(list_square3)

执行结果:

[9, 16, 36, 4, 25, 64]
[9, 16, 36, 4, 25, 64]
[9, 16, 36, 4, 25, 64]

reduce() 函数

reduce(function, iterable)函数同样接收一个函数和一个列表作为参数,reduce()函数属于functools模块,通常用来对一个集合做一些累积操作。function 对象有两个参数,表示对 iterable 中的每个元素以及上一次调用后的结果,运用 function 进行计算,也就是执行重复操作,最终返回一个数值。

from functools import reduce

list_num = [3, 4, 6, 2, 5, 8]
sum = reduce(lambda x, y: x + y, list_num)
print(sum) # 输出:28 = 3 + 4 + 6 + 2 + 5 + 8

总结

本文介绍了lambda函数和常见的 map(),fiilter() 和 reduce() 三个函数,匿名函数通常用于实现一个简单功能,并且该函数只调用一次。

map(),fiilter() 和 reduce() 三个函数通常与lambda函数结合使用,它们的功能也可以使用列表推导式 (List Comprehension)来实现。它们的性能差异不大,可以根据自己习惯使用。

--THE END--

系列文章

1. VSCode + Python环境配置
2. Python PEP—Python增强提案
3. 正则表达式介绍及Python使用方法
4. Python笔记:List相关操作
5. Python笔记:字符串操作
6. Python函数的参数类型
7. Python反射介绍
8. Python笔记:属性值设置和判断变量是否存在
9. Python中的__new__、__init__以及metaclass
10. Python对象及内存管理机制
11. Python内存驻留机制
12. Python笔记:Python装饰器
13. Python中的闭包
14. Python笔记:lambda匿名函数
15. Python多线程与多进程
16. Python协程
17. Python笔记:日期时间获取与转换
18. Python笔记:命令行参数解析
19. Python 命令行参数解析之 Click
20. Python json文件读写
21. Python yaml文件读写
22. Python Scapy 报文构造和解析


欢迎关注公众号:「测试开发小记」及时接收最新技术文章!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值