lambda函数也称匿名参数 CGFT认证lambda函数匿名函数

什么是lambda函数?Lambda函数是自定义函数的一种,专指用关键字” lambda”定义的无名短函数这种函数得名于省略了用def声明函数的标准步骤,接下来我们就来聊聊关于lambda函数也称匿名参数 CGFT认证lambda函数匿名函数?以下内容大家不妨参考一二希望能帮到您!

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

    分享
    投诉
    首页