python3 第二十四章 - 函数式编程之Anonymous function(匿名函数)

匿名函数指一类无须定义标识符的函数或子程序。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

 

 匿名函数有如下几个特色:

  • lambda 只是一个表达式,函数体比 def 简单不少。
  • lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
  • lambda 函数拥有本身的命名空间,像嵌套的函数定义,lambda 函数能够从包含它的做用域中引用变量。
相关文章
相关标签/搜索