Python 之 lambda函数
1、简介
Lambda函数是Python中的匿名函数,即没有名称的函数。它使用lambda关键字定义,主要用于编写简单的、单行的函数表达式。
核心特性:
2、基础语法
2.1、语法格式
2.2、示例
2.2.1、无参函数
# 普通函数def output_content(): print(”打印一行数据的函数”)# 转化成lambda函数,output_content = lambda : print(”打印一行数据的函数”)output_content()
2.2.2、有一个参数的返回值函数
# 有一个参数的返回值函数def return_params_fun(a:int): return a ** 2print(return_params_fun(10))return_params_fun_lam = lambda a : a ** 2print(return_params_fun_lam(10))
2.2.3、有多个参数的返回值函数
# 有多个参数并且有返回值的函数def return_fun(a: int, b : int): return a + bprint(return_fun(10,30))# 转化成lambdareturn_fun_lam = lambda a, b : a + bprint(return_fun_lam(10, 30))
2.2.4、默认参数的
def fun(a: int , b:int=2): return a*bprint(fun(5))print(fun(5,3))print(”--------”)lam_fun = lambda a, b=2 : a * bprint(lam_fun(5))print(lam_fun(5,3))
2.2.5、可变参数(*args 和 **kwargs)
def fun(*args): return sum(args)print(fun(1,2,3,4,5,6,7))print(”----------------”)args_fun = lambda *args: sum(args)print(args_fun(1,2,3,4,5,6,7))def kwargs_fun(**kwargs): for k,v in kwargs.items(): print(f”{k} : {v}”)dict_item = {”name”:'admin', ”age” : 18, ”address” : '北京海淀'}kwargs_fun(**dict_item)kwargs_fun_lam = lambda **kwargs : ”\n”.join(f”{k}={v}” for k, v in kwargs.items())print(kwargs_fun_lam(name = 'zhangsan', age = 19))”””name : adminage : 18address : 北京海淀name=zhangsanage=19”””
3、与高阶函数配合使用
3.1、map() 映射
# 将列表的每个元素平方nums = [1,2,3,4,5]squared = list(map(lambda x : x ** 2, nums))print(squared) #[1,4,9,16,25]
3.2、filter() 过滤
# 筛选出偶数nums =[1,2,3,4,5]evens = list(filter(lambda x : x % 2 ==0, nums))print(evens)# [2, 4]
3.3、sorted() 自定义排序
# 根据单词长度进行排序words = [”apple”,”banana”,”java”, ”C++”, ”C”, ”Python”]print(sorted(words, key=lambda x: len(x), reverse=True))dict_num = [ {”name”:”admin”,”age”: 18}, {”name”:”John”,”age”:10}, {”name”:”Rose”,”age”:21}, {”name”:”zhangsan”,”age”:56}, {”name”:”wangwu”,”age”:37}]# 按照age年龄进行正序排序sorted_fun1=sorted(dict_num, key=lambda x: x[”age”])print(sorted_fun1)print(”---------”)# 按照age 年龄 进行倒序排序sorted_fun2=sorted(dict_num, key=lambda x: x[”age”], reverse=True)print(sorted_fun2)# 按照name的长度进行正序排序sorted_fun3=sorted(dict_num, key=lambda x: len(x[”name”]))print(sorted_fun3)
3.4、reduce() 归约(需要导入functools)
# def fun_reduce(): return reduce(lambda x, y: x*y, range(1,6))print(fun_reduce())lamdba_reduce = reduce(lambda x, y: x*y, range(1,6))print(lamdba_reduce)
3.5、max() / min() 自定义比较键
names = ['John','Smith','admin', ”Python”, ”C”, ”C++”, ”JavaScript”]max_name = max(names, key=lambda x : len(x))print(max_name)min_name = min(names, key=lambda x : len(x))print(min_name)
4、性能与限制
4.1、性能特点
import timeit# 普通函数 vs Lambda(性能几乎无差异)def add_fun(x, y): return x + yadd_lambda = lambda x,y : x + y# 测试执行时间(几乎相同)print(timeit.timeit(”add_func(3, 5)”, globals=globals()))print(timeit.timeit(”add_lambda(3, 5)”, globals=globals()))
4.2、限制
# ❌不能包含语句(如:赋值,循环)# lambda x : x = x + 1# SyntaxError# ❌不能包含多行表达式(除非使用 括号 或 反斜杠)# lambda x :# x + 1# 无效# ✅ 可以使用括号包含多行表达式mulit_fun = lambda x : ( x + 1 if x > 2 else x -1)print(mulit_fun(0))# -1print(mulit_fun(2))# 1
5、Lambda 与 普通函数的区别
6、总结
- Lambda的核心价值在于简洁性,它让Python的函数式编程更加优雅。
- 一行逻辑用lambda,多行复杂写 def ; 回调排序最合适,可读第一别逞能。