python中lambda的用法
Posted 呆呆象呆呆
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python中lambda的用法相关的知识,希望对你有一定的参考价值。
0 概述
匿名函数
,顾名思义即没有名称的函数,和关键字def
定义的函数的最大区别在于匿名函数创建后返回函数本身,即匿名函数不需要return
来返回值,表达式本身结果就是返回值,而def
创建后则赋值给一个变量名,在Python中,关键词lambda
通常用来创建小巧的,一次性的匿名函数对象
。以下是匿名函数lambda
表达式的形式:
lambda arg1,arg2,.....argn:expression
arg1
,arg2
……argn
为在表达式中需要使用的变量。可以有任意数量的参数.
以下为一些lambda
的特点:
-
lambda
只能有一个表达式,且不能包含任何语句,返回一个可以赋值给任何变量的函数对象。可以在任何可以使用表达式的场景一样使用lambda
。 -
lambda
的主体也是一个表达式,即和def
定义的函数一样,lambda
也有函数主体,不过lambda
的主体仅仅是一个表达式,所以其使用的功能受到较大的限制。 -
lambda
并不会带来程序运行效率的提高,只会使代码更简洁。
1 语法实现举例
尽量会用def
函数和lambda
两个都实现一遍然后这样比较方便比较。
例子1:无参匿名函数
lambda_fun = lambda :True
print(lambda_fun)
print(lambda_fun())
# 等价于
def def_fun():
return True
print(def_fun)
print(def_fun())
例子2:有参匿名函数(无默认值)
x
和y
是函数的参数,x+y
是表达式,它被执行并返回结果。
lambda x, y : x + y
返回的是一个函数对象,它可以被赋值给任何变量。
lambda_fun = lambda x, y: x + y
print(lambda_fun)
print(lambda_fun(1,2))
# 等价于
def def_fun(x,y):
return x + y
print(def_fun)
print(def_fun(1,2))
例子3:有参匿名函数(有默认值)
lambda_fun = lambda x, y=100: x + y
print(lambda_fun)
print(lambda_fun(1))
print(lambda_fun(1,2))
# 等价于
def def_fun(x,y=100):
return x + y
print(def_fun)
print(def_fun(1))
print(def_fun(1,2))
例子4:从后面传递参数
之前的示例我们将lambda匿名函数
赋值一个变量,通过类似def定义的函数的方式传参,我们可以在lambda
后面直接传递参数:
lambda_result = (lambda x, y=100: x + y)(1,2)
print(lambda_result)
2 一些使用示例
绝大多数lambda
函数作为一个参数传给一个需要函数对象为参数的函数,比如map
,reduce
,filter
等函数。
例子1:结合三元表达式求两值中最小值
lower = lambda x,y: x if x<y else y
print(lower(7,100))
例子2:对字典某一键值进行排序
d = ["order":3,"order":1,"order":2]
# 根据order键值排序
d.sort(key=lambda x:x['order'])
print(d)
例子3:与map一起使用
map
的详细语法可见
map函数
需要一个函数对象和任意数量的iterables,如list
,dictionary
等。它为序列中的每个元素执行function_object
,并返回由函数对象修改的元素组成的列表。
list的迭代
result = map(lambda x: x+2, [1,2,3,4])
print(list(result))
dict的迭代
dict_a
中的每个dict
作为参数传递给lambda函数
。lambda函数
表达式作用于每个dict
的结果作为输出。
dict_a = ['name': 'python', 'points': 10, 'name': 'java', 'points': 8]
print(list(map(lambda x : x['name'], dict_a)))
print(list(map(lambda x : x['points']*10, dict_a)))
print(list(map(lambda x : x['name'] == "python", dict_a)))
salaries='n1':3000,'n2':100000000,'n3':10000,'n4':2000
# 注意!!max和min函数对字典的比较是一般情况是key
max(salaries)
min(salaries)
# 通过max函数的key参数,改变max函数的比较依据
# max函数会for循环出一个值,值会被传给key指定的函数,调用key指定的函数,拿到返回值作为依据
# 第一个值是被max循环的对象
a = max(salaries,key=lambda k :salaries[k])
b = min(salaries,key=lambda k :salaries[k])
print(a)
print(b)
按照键值排序如果想返回字典,可以借用字典生成器:
dict1 = "g": 2, "f": 1, "a": 6
d1 = i[0]: i[1] for i in sorted(dict1.items(), key=lambda d: d[1])
按照key
排序
例子4:将lambda函数赋值给其他函数
从而将其他函数用该lambda函数
替换。
例如,为了把标准库time
中的函数sleep
的功能屏蔽(Mock),我们可以在程序初始化时调用:
time.sleep=lambda x:None
这样,在后续代码中调用time库
的sleep函数
将不会执行原有的功能。例如,执行time.sleep(3)
时,程序不会休眠3秒钟,而是什么都不做。
LAST 参考文献
Python学习教程:Python3匿名函数lambda详解及使用示例
python中的lambda函数用法 - 知乎
Python3之字典生成器结合lambda实现按key/value排序_Moelimoe的博客-CSDN博客
Python Lambda 函数|极客教程
关乎Python lambda你也看得懂 - 知乎
Python lambda介绍 - Goodpy - 博客园
Python - 生成式、lambda 匿名函数_LIN的博客-CSDN博客
以上是关于python中lambda的用法的主要内容,如果未能解决你的问题,请参考以下文章