python中lambda的用法

Posted 呆呆象呆呆

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python中lambda的用法相关的知识,希望对你有一定的参考价值。

0 概述

匿名函数,顾名思义即没有名称的函数,和关键字def定义的函数的最大区别在于匿名函数创建后返回函数本身,即匿名函数不需要return来返回值,表达式本身结果就是返回值,而def创建后则赋值给一个变量名,在Python中,关键词lambda通常用来创建小巧的,一次性的匿名函数对象。以下是匿名函数lambda表达式的形式:

lambda arg1,arg2,.....argn:expression

arg1arg2……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:有参匿名函数(无默认值)

xy是函数的参数,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函数作为一个参数传给一个需要函数对象为参数的函数,比如mapreducefilter等函数。

例子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,如listdictionary等。它为序列中的每个元素执行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的用法的主要内容,如果未能解决你的问题,请参考以下文章

(11) lambda表达式用法

python中lambda的用法

python中lambda的用法

Python lambda的用法

匿名函数及其使用

python lambda函数用法?