python3 第二十四章 - 函数式编程之Anonymous function(匿名函数)
2018-02-05 22:18
323 查看
匿名函数指一类无须定义标识符的函数或子程序。Python用lambda语法定义匿名函数,只需用表达式而无需申明。
lambda语法的定义如下:
有些时候,当我们在传入函数时,不需要显式地定义函数,直接传入匿名函数更方便。匿名函数有个限制,就是只能有一个表达式,无需写return,返回值就是该表达式的结果。用匿名函数有个好处,因为函数没有名字,不必担心函数名冲突。此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数
实例:
以上代码,输出:
在定义时直接被调用,比如:
以上代码,输出:
但通常都是在定义lambda函数的同时将其应用作为参数传递给另一个函数,该函数在其处理过程中对lambda定义的函数进行调用,例如:
以上代码,输出:
上面几个实例都是比较简单的,我们再来看几个复杂的。假如,我们要找出两个数中小的那一个,我们可以用lambda这么写:
以上代码,输出:
在上面的实例中,函数体里的那种写法,实际上是python中的三元表达式(三目运算符)。在Python中,语法如下:
例如:
是先输出结果,再判定条件,输出1,如果5大于3,否则输出0
再来几个更复杂的,后面这几个如果你是初学者,可以略过!
柯里化(什么是柯里化?https://baike.baidu.com/item/%E6%9F%AF%E9%87%8C%E5%8C%96/10350525?fr=aladdin):
以上代码,输出:
递归:
以上代码,输出:
或
以上代码,输出:
匿名函数有以下几个特点:
lambda 只是一个表达式,函数体比 def 简单很多。
lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
lambda 函数拥有自己的命名空间,像嵌套的函数定义,lambda 函数可以从包含它的作用域中引用变量。
lambda语法的定义如下:
lambda [arg1 [,arg2, ... argN]] : expression
有些时候,当我们在传入函数时,不需要显式地定义函数,直接传入匿名函数更方便。匿名函数有个限制,就是只能有一个表达式,无需写return,返回值就是该表达式的结果。用匿名函数有个好处,因为函数没有名字,不必担心函数名冲突。此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数
实例:
# 可写函数说明 sum = lambda arg1, arg2: arg1 + arg2 # 调用sum函数 print("相加后的值为 : ", sum(10, 20)) print("相加后的值为 : ", sum(20, 20))
以上代码,输出:
相加后的值为 : 30 相加后的值为 : 40
在定义时直接被调用,比如:
print((lambda x, y: x-y)(3, 4))
以上代码,输出:
-1
但通常都是在定义lambda函数的同时将其应用作为参数传递给另一个函数,该函数在其处理过程中对lambda定义的函数进行调用,例如:
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))
以上代码,输出:
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 函数可以从包含它的作用域中引用变量。
相关文章推荐
- Python入门 第四天(函数式编程、map、reduce、filter、排序函数、函数返回函数、闭包、匿名函数lambda)
- python函数式编程之匿名函数、装饰器、偏函数
- 【Python学习笔记】函数式编程:匿名函数lambda
- python--函数式编程 (高阶函数(map , reduce ,filter,sorted),匿名函数(lambda))
- python3 第二十三章 - 函数式编程之Partial function(偏函数)
- python的嵌套函数,递归,匿名函数,函数式编程,高阶函数,内置函数
- Learning Python 012 函数式编程 2 返回函数 匿名函数 装饰器 偏函数
- Learning Python 012 函数式编程 2 返回函数 匿名函数 装饰器 偏函数
- Python 函数式编程--匿名函数Lambda
- python函数式编程:匿名函数,装饰器,偏函数
- Python的函数式编程-传入函数、排序算法、函数作为返回值、匿名函数、偏函数、装饰器
- 慕课网学习Python进阶教程,包括(函数式编程、模块、面向对象编程、类的继承、定制类)
- python 函数式编程工具
- python 函数式编程
- python 学习笔记---函数式编程之高阶函数
- 【Python】[函数式编程]高阶函数,返回函数,装饰器,偏函数
- Python中的函数式编程:不可变的数据结构
- Python 函数式编程--装饰器
- Python之函数式编程