当前位置: 移动技术网 > IT编程>开发语言>JavaScript > ESP32 MicroPython教程:Lambda函数

ESP32 MicroPython教程:Lambda函数

2020年07月07日  | 移动技术网IT编程  | 我要评论

Lambda是许多编程语言支持的一种概念,如JavaScript和C#,在更加正式的定义中,它们被称为匿名函数。用途广泛,其中一个特别重要的应用是作为参数传递给map、filter和reduce等列表函数。

定义lambda函数

在lambda关键字之后,指定lambda函数的参数,并在冒号“:”之后定义函数的表达式。
关键字 参数:表达式

lambda args: expression

当拥有多个参数时,需要使用逗号将其隔离,并且不能使用括号
不能像常规函数那样使用return(返回值)语句。这是因为lambda函数只能包含表达式,return是一种语句。

求和

常规

创建一个常规函数和一个lambda函数对两个数进行求和。

def sum(x,y):
return (x+y)

result = sum (4,5)
print(result)

多个输入参数

多个输入参数(x和y)。

sumLambda = lambda x,y: x+y

result = sumLambda(4,5)
print(result)

注意,我们已经将lambda函数指定为一个变量,所以我们可以在随后为其赋予两个参数值。但这与前面的具名函数还是有所不同,因为如果我们释放了lambda变量(例如,将这个变量赋予了其它值),那么lambda函数也将丢失,因为它不是一个具名函数。在实际使用中,基本不会将它赋予任何变量,只是简单地将它作为函数的输入参数使用。

不是很懂,但是lambda函数更容易地编写出更紧凑和简洁的代码。

使用lambda函数

过滤

filter函数过滤

先说filter函数(过滤),有两个输入参数,第一个参数是一个判断函数,第二个参数是一个可迭代对象,它将把迭代对象的每个元素传递给判断函数,然后仅输出判断函数的返回值为True的元素。必须在判断函数中定义返回True或False的条件。
声明一个整数list列表,作为filter函数的输入参数。

testList = [1,2,3,4,5,6,7,8,9,10]

调用filter函数,将lambda函数作为filter函数的过滤条件,并将此list列表作为迭代对象。表达式x>5将产生一个布尔值(True或False)。

lambda x: x>5

完整的filter函数,输出值是一个过滤器类对象

filteredResult = filter(lambda x: x>5 , testList)
print (type(filteredResult))

转换为一个list列表。可以通过内嵌的方式在调用filter函数的同一行完成这种转换。

finalList = list(filteredResult)[/align][align=left] 
print(finalList)

完整

testList = [1,2,3,4,5,6,7,8,9,10]
filteredResult = filter(lambda x: x>5 , testList)
finalList = list(filteredResult)[/align][align=left] 
print(finalList)

在这里插入图片描述

传统的循环方式

注意,在IF判断条件中,不需要将布尔值与True进行比较。因为lambda函数的输出值已经是一个布尔值,不需要编写“if filterLambda(element) == True”这样的语句,只需简单地编写“if filterLambda(element)”即可。

传统的就要相比较长一些,没有那么简洁。

testList = [1,2,3,4,5,6,7,8,9,10]
finalList = []

filterLambda = lambda x: x>5

for element in testList:
if filterLambda(element):
finalList.append(element)

print (finalList)

使用具名函数过滤

定义一个名为isGreater的函数,待检验的数值将作为它的输入参数。如果数值大于5,那么它将返回True,否则返回False。同样,不需要使用IF语句进行判断。
简单地调用filter函数即可,将定义的具名函数而非lambda函数作为filter函数的第一个参数。

def isGreater(x):
return x>5

testList = [1,2,3,4,5,6,7,8,9,10]

filteredList = list(filter(isGreater,testList))
print(filteredList)

列表元素依次加一

方法一: map函数

Map函数有两个输入参数,第一个参数为一个映射函数,lambda函数可作为映射函数,第二个参数为可迭代对象(例如,list列表 ),映射函数用于对可迭代对象的每个元素进行映射运算。Map函数的返回值为一个对象,这个对象可用于创建list列表或数组等。

lambda函数可以与map函数一起使用,让代码更容易编写且更加紧凑。

testList = [1,2,3,4,5,6,7,8,9,10]#定义一个整数列表,这个列表将被用于执行映射操作

mappedObject = map(lambda x: x+1, testList)#将lambda函数及list列表作为输入参数写入map函数中,list列表的每个值,依次执行加1操作
mappedList = list(mappedObject)#将map对象转换回list列表
print(mappedList)

方法二:传统

结果相同,但是麻烦。

testList = [1,2,3,4,5,6,7,8,9,10]
finalList = []
myLambda = lambda x: x+1#list列表的每个值,依次执行加1操作

for element in testList:
  finalList.append( myLambda(element) )#在结果列表中追加元素

print(finalList)

方法三:不用lambda函数

def increment (x):#定义常规具名函数
return x+1#将把输入参数加1后返回

testList = [1,2,3,4,5,6,7,8,9,10]
resultList = list(map(increment, testList))#使用increment函数作为其输入参数

print (resultList)

本文地址:https://blog.csdn.net/zhazhawoaini/article/details/107144781

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网