lambda函数也称匿名参数 CGFT认证lambda函数匿名函数
什么是lambda函数?Lambda函数是自定义函数的一种,专指用关键字” lambda”定义的无名短函数这种函数得名于省略了用def声明函数的标准步骤,接下来我们就来聊聊关于lambda函数也称匿名参数 CGFT认证lambda函数匿名函数?以下内容大家不妨参考一二希望能帮到您!
lambda函数也称匿名参数 CGFT认证lambda函数匿名函数
什么是lambda函数?
Lambda函数是自定义函数的一种,专指用关键字” lambda”定义的无名短函数。这种函数得名于省略了用def声明函数的标准步骤。
lambda函数的语法
lambda函数的语法只包含一个语句,如下:
lambda [arg1 [,arg2,…argn]]:expression
简单表达一下:
lambda 形式参数 : 函数表达式
(lambda表达式汇总的参数可以有多个,并且不需要用括号括起来)
例1
sum_1 = lambda arg1, arg2: arg1 arg2
# lambda是一个表达式,可以被命名,其中arg1, arg2是形式参数,arg1 arg2 函数表达式
sum_1(1,2)
返回结果 3
上述lambda函数等同于下列自定义函数:
def sum2(arg1, arg2):
return arg1 arg2
sum2(1,2)
返回结果 3
lambda函数不被命名也可以直接调用
(lambda x,y : x y)(1,2)
返回结果3
注: Lambda函数能接收任何数量的参数但只能返回一个表达式的值,不能直接调用print,也不需要return
例2
lambda函数可以作为其他函数的实际参数使用
def fun(a, b, c):
print ("a =", a)
print ("b =", b)
print ("d=", c(a, b))
fun(2, 4, lambda a,b:pow(a, b))
返回结果
a = 2
b = 4
d = 16
自定义函数fun的第三个参数c是一个函数,在调用函数fun的时候,传给参数c的是lambda函数,lambda函数实现的是a的b次幂.
lambda函数与map\filter\reduce函数
Lambda函数经常与高阶函数一起使用,它将一个或多个函数作为参数或返回一个或多个函数。
lambda函数与map函数
对列表中每一个元素的遍历操作
#将列表中的元素每个都计算平方
list1 = [1, 2, 3, 4, 5]
list2 = []
for i in list1:
list2.append(i**2)
list2
返回结果[1, 4, 9, 16, 25]
以上用循环实现的操作,明白易懂,只是代码量稍显多一点,下边用lambda函数进行一边操作作为对比
list1 = [1, 2, 3, 4, 5]
list2 = map(lambda x: x**2, list1)
list(list2)
返回结果[1, 4, 9, 16, 25]
代码量明显简短不少,由于map函数返回的是迭代器,需要用list函数进行一次转换.
当然在代码简短方面还可以做到更简短
[x**2 for x in [1,2,3,4,5]]
返回结果[1, 4, 9, 16, 25]
列表推导式的代码更简单,也很易懂,恐怕这也是很多人不建议使用lambda函数的原因之一
lambda与filter函数
指定过滤列表元素的条件
例如:从指定列表中过滤出元素值大于5的其他元素添加到新列表中
list3 = [1,2,3,4,5,6,7,8,9]
list4=[]
for i in list3:
if i > 5:
list4.append(i)
list4
返回结果[6, 7, 8, 9]
现用循环来实现,代码量稍大,但是易懂,下边用lambda和filter实现:
list5 = filter(lambda x: x > 5 ,list3)
list(list5)
返回结果[6, 7, 8, 9]
代码量精简不少,按照惯例,还是依然有可以跟精简的代码
[x for x in list3 if x > 5]
返回结果[6, 7, 8, 9]
lambda与reduce函数
指定列表中两两相邻元素的结合条件
在Python3中reduce函数不再是内置函数,调用前需要先导入functools包
from functools import reduce
sum1 = reduce( (lambda x, y: x y), [1, 2, 3, 4] )
sum1
返回结果10
如果只是求累计和,根本用不着动用lambda和reduce函数,一个sum函数就可以完美解决,不过如果有这样的一个需求到是可以用到这两个函数,比如要把[1,2,3,4]变成1234呢?
reduce((lambda x ,y : x * 10 y),[1,2,3,4])
返回结果1234
不实现累加,而是其他两两相邻元素的结合条件,也是可以通过这两个函数联用实现的
例如
reduce( (lambda x, y: x * y), [1, 2, 3, 4] )
返回结果24。
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com