python 之匿名函数(lambda)
什么是匿名函数?匿名函数就是不用def关键字,使用lambda关键字定义的一个函数。匿名函数简约而不简单。
匿名函数的格式:
lambda[ paramters1, paramters2 , ...... ]: expression
1.lambda是一个表达式,而不是一个语句
2.lambda 的主体是只有一行的简单表达式,并不能扩展成一个多行的代码块
匿名函数和常规函数一样,参数都是根据需要可填可不填,返回的都是一个函数对象(function object),它们的用法也极其相似。
下面分别用lambda 、def 定义一个带有参数和无参数的函数
sum = lambda x, y: x + y print(sum(1, 0))
"D:\Program Files\Python\Python37-32\python.exe" D:/demo/lambda_1.py 1
等价于
def sum(x, y): return x +y print(sum(1, 0))
"D:\Program Files\Python\Python37-32\python.exe" D:/demo/lambda_1.py 1
result = lambda: False print(result)
"D:\Program Files\Python\Python37-32\python.exe" D:/demo/lambda_1.py <function result at 0x031C08A0>
等价于
def result(): return False print(result)
"D:\Program Files\Python\Python37-32\python.exe" D:/demo/lambda_1.py <function result at 0x031C08A0>
lambda能够出现在一些def不能出现的地方,如列表常量中
list1 = [(lambda x: x)(x) for x in range(5)] print(list1)
"D:\Program Files\Python\Python37-32\python.exe" D:/demo/lambda_1.py [0, 1, 2, 3, 4]
lambda可以作为某些函数的参数
import os def read_file(path, name): filename = path(name) with open(filename, encoding='utf-8') as f: datas = f.readlines() print(datas) print(read_file(path=(lambda p: os.path.abspath(os.path.join(os.path.dirname(__file__), p))), name="set_1.py"))
"D:\Program Files\Python\Python37-32\python.exe" D:/demo/lambda_1.py ['# # 集合中不能含list、dict\n', '# set2 = {"rice", 1, (True, False)}\n', '# # 通过set()函数传入可迭代对象创建集合\n', '# set3 = set(range(10))\n', '# set4 = set(list(range(10)))\n', '# set5 = set(tuple(range(10)))\n', '# set6 = set("hello")\n', '# print(set2)\n', '# print(set3)\n', '# print(set4)\n', '# print(set5)\n', '# print(set6)\n', '\n', '# set1 = {2, 3, 4, 6, 5, 10}\n', '# set2 = {1, 3, 4, 9, 10}\n', '# # 集合的交集, 取共有的元素\n', '# result1 = set1 & set2\n', '# # 集合的差集,取集合2中不存在的元素\n', '# result2 = set1 - set2\n', '# # 集合的并集,取集合1、2所有元素\n', '# result3 = set1 | set2\n', '# # 集合的对称差,取集合1、集合2中不相同的元素\n', '# result4 = set1 ^ set2\n', '# print(result1)\n', '# print(result2)\n', '# print(result3)\n', '# print(result4)\n', '\n', 'list1 = [2, 2, 4, 5, 6, 6, 9, 0, 9]\n', '# 利用集合去重\n', 'set1 = set(list1)\n', '# 再将集合转成列表\n', 'list1 = list(set1)\n', 'print(list1)'] None
lamada 和def定义的函数一样,也可以嵌套
result = (lambda x: (lambda y: x+y)) # 这就是一个用lambda实现的闭包,与普通闭包一样,内嵌lambda表达式可以获得上层lambda函数的变量 z = result(3) print(result(3)) print(z(3))
"D:\Program Files\Python\Python37-32\python.exe" D:/demo/lambda_1.py <function <lambda>.<locals>.<lambda> at 0x03C3A780> 6
匿名函数的应用
filter函数
# filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表,该函数接收两个参数 # 其中第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中 data = filter(lambda x: x < 5, [3, 6, 7, 9, 0]) print(list(data))
"D:\Program Files\Python\Python37-32\python.exe" D:/demo/lambda_1.py [3, 0]
map函数
# map()会根据提供的函数对指定序列做映射 # 第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。 data = map(lambda x: x < 5, [3, 6, 7, 9, 0]) print(list(data))
"D:\Program Files\Python\Python37-32\python.exe" D:/demo/lambda_1.py [True, False, False, False, True]
reduce函数
# reduce() 函数会对参数序列中元素进行累积。 # reduce中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果 from functools import reduce data = reduce(lambda x, y: x + y, [3, 6, 7, 9, 0]) print(data)
"D:\Program Files\Python\Python37-32\python.exe" D:/demo/lambda_1.py 25
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~