MicroPython教程(Lambda函数使用)
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