匿名函数指一类无须定义标识符的函数或子程序。Python用lambda语法定义匿名函数,只需用表达式而无需申明。
lambda语法的定义以下:python
lambda [arg1 [,arg2, ... argN]] : expression
有些时候,当咱们在传入函数时,不须要显式地定义函数,直接传入匿名函数更方便。匿名函数有个限制,就是只能有一个表达式,无需写return,返回值就是该表达式的结果。用匿名函数有个好处,由于函数没有名字,没必要担忧函数名冲突。此外,匿名函数也是一个函数对象,也能够把匿名函数赋值给一个变量,再利用变量来调用该函数express
实例:函数
# 可写函数说明 sum = lambda arg1, arg2: arg1 + arg2 # 调用sum函数 print("相加后的值为 : ", sum(10, 20)) print("相加后的值为 : ", sum(20, 20))
以上代码,输出:spa
相加后的值为 : 30 相加后的值为 : 40
在定义时直接被调用,好比:code
print((lambda x, y: x-y)(3, 4))
以上代码,输出:对象
-1
但一般都是在定义lambda函数的同时将其应用做为参数传递给另外一个函数,该函数在其处理过程当中对lambda定义的函数进行调用,例如:blog
L = [1, 2, 3, 4, 5, 6, 7, 8] # 过滤掉全部的偶数 res = filter(lambda x: x % 2 == 1, L) print(list(res))
以上代码,输出:递归
[1, 3, 5, 7]
上面几个实例都是比较简单的,咱们再来看几个复杂的。假如,咱们要找出两个数中小的那一个,咱们能够用lambda这么写:作用域
fn = lambda x, y: x if x < y else y print(fn(1, 2))
以上代码,输出:get
1
在上面的实例中,函数体里的那种写法,其实是python中的三元表达式(三目运算符)。在Python中,语法以下:
为真时的结果 if 断定条件 else 为假时的结果
例如:
1 if 5>3 else 0
是先输出结果,再断定条件,输出1,若是5大于3,不然输出0
再来几个更复杂的,后面这几个若是你是初学者,能够略过!
柯里化(什么是柯里化?https://baike.baidu.com/item/%E6%9F%AF%E9%87%8C%E5%8C%96/10350525?fr=aladdin):
res = (lambda x: (lambda y: (lambda z: x + y + z)(1))(2))(3) print(res)
以上代码,输出:
6
递归:
func = lambda n: 1 if n == 0 else n * func(n-1) print(func(5))
以上代码,输出:
120
或
f = lambda func, n: 1 if n == 0 else n * func(func, n - 1) print(f(f, 4))
以上代码,输出:
24
匿名函数有如下几个特色: