Python Lambda 匿名函数详解:语法、用法与实战示例
本文详细介绍 Python 中 Lambda 匿名函数的定义语法、参数规则及表达式限制。通过对比常规函数与匿名函数的代码实现,演示其在求最大值、列表映射、过滤及字典操作中的具体应用,帮助开发者掌握简洁高效的函数式编程技巧。
前言
在编写代码时,若无需为函数分配特定名称,可直接使用 lambda 关键字创建匿名函数。
语法结构如下:
变量名 = lambda 参数: 表达式
参数部分为可选内容,通常由逗号分隔的变量名组成,代表位置参数。
表达式部分不可包含循环语句或 return 关键字,但允许使用 if...else... 条件表达式。
注意事项:
1. 表达式内禁止使用循环和 return,但支持 if...else... 语句。
2. 参数并非必须,若存在多个参数,需以逗号分隔。
3. 表达式的计算结果将直接作为返回值返回。
一、创建无参匿名函数:
func = lambda: 3 > 2
ret = func() # 调用匿名函数,变量名(),使用变量ret来接收表达式返回的内容
print(ret) #True
def func():
return 3 > 2
ret = func()
print(ret) #True
# 和func=lambda :3>2 等价
运行结果:
True
True

二、创建带参数的匿名函数
def func(x, y):
return x + y
ret = func(1, 2)
print(ret) #3
#匿名函数
func = lambda x, y: x + y
ret = func(1, 2) # 如果匿名函数有参数,调用匿名函数的时候需要传递实参。
print(ret) #3
三、获取两个数中的最大值
def func(x, y):
if x < y:
return y
else:
return x
ret = func(30, 20)
print(ret) #30
#匿名函数
func = lambda x, y: y if x < y else x
# 注意if和else 没有 : 不能换行,if判断体写在判断条件前面
ret = func(11, 2)
print(ret) #11
func = lambda x, y: y if x < y else x

四、练习题:
1. 将 add() 方法改写为匿名函数
def add(x, y):
return x + y
func = lambda x, y: x + y
ret = func(1, 2)
print(ret) # 3
2. 利用 max 函数求解字典最大值
dic = {'k1': 10, 'k2': 200, 'k3': 20}
ret = max(dic) # 默认比较的是字典的key的大小。ASCII对于的十进制
print(ret) # k3
def func(key):
return dic[key]
ret = max(dic, key=func) # 改变比较规则,用value比较大小,最终返回的函数是字典的key值
print(ret) # k2
使用匿名函数
ret = max(dic, key=lambda x: dic[x])
print(ret) #k2

3. 根据列表中字典的 'name' 字段值进行比较
lst = [
{'name': 'egon', 'price': 100},
{'name': 'rdw', 'price': 666},
{'name': 'zat', 'price': 1}
]
# ret = max(lst) # 报错,字典之间不能比较。
# print(ret)
def max_name(dic):
return dic['name'] # 返回 字典 name对应的值
ret = max(lst, key=max_name) # 指定比较内容
print(ret)
使用匿名函数进行比较:
ret = max(lst, key=lambda dic: dic['name']) # 指定比较内容
print(ret)
运行结果:
{'name': 'zat', 'price': 1}
{'name': 'zat', 'price': 1}

同理,也可根据列表中字典的 'price' 字段值大小进行比较
lst = [
{'name': 'egon', 'price': 100},
{'name': 'rdw', 'price': 666},
{'name': 'zat', 'price': 1}
]
def max_price(dic):
return dic['price'] # 返回 字典 price 的值
匿名函数:
ret = max(lst, key=lambda dic: dic['price']) # 指定比较内容 100,666,1
print(ret) #{'name': 'rdw', 'price': 666}
4. 计算列表 lst 中每个元素的平方值
lst = [1, 3, 4]
def square(num):
num2 = num * num
return num2
ret = map(square, lst) # 迭代器 1,4,16
for i in ret:
print(i) # 1,9,16
匿名函数:
ret = map(lambda num: num * num, lst)
for i in ret:
print(i) # 1,9,16

5. 过滤出列表中的所有奇数:
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
def odd(num):
if num % 2 == 1:
return True
else:
return False
ret = filter(odd, lst)
print(list(ret)) #[1, 3, 5, 7, 9]
# 匿名函数:
ret = filter(lambda num: True if num % 2 == 1 else False, lst)
print(list(ret)) #[1, 3, 5, 7, 9]

6. 现有两个元组 (('a'), ('b')) 和 (('c'), ('d')),请使用 Python 匿名函数生成列表 [{'a':'c'}, {'b':'d'}]
tup1 = (('a'), ('b'))
tup2 = (('c'), ('d'))
# [{'a':'c'},{'b':'d'}]
ret = zip(tup1, tup2) #(('a','c'),('b','d'))
def func(tup):
#('a','c') ('b','d')
return {tup[0],tup[1]}
ret1=map(func,ret)
print(list(ret1)) #[{'a': 'c'}, {'b': 'd'}]
# 匿名函数:
ret2 = list(map(lambda tup: {tup[0]: tup[1]}, ret))
print(ret2) #[{'a': 'c'}, {'b': 'd'}]

至此,关于 Python 基础中匿名函数的介绍已完成。如需了解更多 Python 匿名函数相关内容,欢迎查阅本站往期文章或继续浏览后续教程。感谢大家的支持!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













