python函数式编程:匿名函数,装饰器,偏函数
2017-12-13 17:38
330 查看
一 匿名函数:
尽管python的语法已经很简洁,但是定义函数的过程还是相对繁琐,当我们在调用函数的过程中,python为我们提供了可以节省定义函数时间的方法,让我们可以不用显示的调用函数,那就是匿名函数,匿名函数使用lambda关键字:
匿名函数有一个限制 ,就是没有return,但匿名函数的表达式就是个返回值:
二 装饰器:
再说一下 装饰器的 基本语法:
三 偏函数:
先不说偏函数的定义,我们慢慢往下看,当然这里的偏函数不是指的数学上 的偏函数(而且数学上的偏函数我早就已经还给教我数学的体育老师了)
我们先自己定义一个函数:
当我们想生成一个偶数列表的时候,我们可以这样做:
假如我们想频繁的使用这个函数的时候,一遍又一遍的修改是很麻烦的,于是乎我们可以这样做:
这样做离所谓的偏函数不远了
python中有一个模块叫做functools,该模块提供了很多使用的功能,其中就有偏函数(partial function)的功能。
偏函数让我们不用自己定义函数:
我们做个小测试:
看过三国的应该都知道偏将军一职位,官制中,系将军的辅佐,与裨将军两者都为杂号将军;偏函数,其实是函数的辅佐。
偏函数的作用就是:将所作用的函数作为partial()函数的第一个参数,原函数的各个参数依次作为partial()函数的后续参数,原函数有关键字参数的一定要带上关键字,没有的话,按原有参数顺序进行补充。偏函数的第二个部分(可变参数),按原有函数的参数顺序(必须是有序)进行补充,参数将作用在原函数上。
后续我还会 在写篇对装饰器 和偏函数理解略深度的博客。
尽管python的语法已经很简洁,但是定义函数的过程还是相对繁琐,当我们在调用函数的过程中,python为我们提供了可以节省定义函数时间的方法,让我们可以不用显示的调用函数,那就是匿名函数,匿名函数使用lambda关键字:
L= [] L = list(map(lambda x: x * x,[1,2,3,4,5,6,7,8])) print(L) [1, 4, 9, 16, 25, 36, 49,64] 这里面定义了一个将后面列表的值平方的匿名函数:lambda x : x * x 就相当于 def f(x): return x * x
匿名函数有一个限制 ,就是没有return,但匿名函数的表达式就是个返回值:
>>> f = lambda x : x * x >>> f <function <lambda> at 0x0000020A82D62E18> >>> f(5) 25
二 装饰器:
我的理解是 当在频繁的使用某函数的时候,我们想在不改变原函数的基础上,给该函数附加一些功能或者是说明,就用到了装饰器,先说一下装饰器的原理: 无参函数:
>>> def mul_fn(a,b): ... return a * b ... >>> def say_name(fn): ... def temp(): ... print('附加功能语句') ... return fn .. 4000 . return temp ... >>> a = say_name(mul_fn) >>> print(a()(2,3)) 附加功能语句 6
有参函数:
>>> def add_fn(a,b): ... return a + b ... >>> def say_name(fn): ... def temp(*args,**kw): ... print('附加功能语句') ... return fn(*args,**kw) ... return temp ... >>> add_fn = say_name(add_fn) >>> add_fn(2,3) 附加功能语句 5
再说一下 装饰器的 基本语法:
>>> def say_name(fn): ... def temp(*args,**kw): ... print('call %s ():'%fn.__name__) ... return fn(*args,**kw) ... return temp ... >>> @say_name ... def add_fn(a,b): ... return a + b ... >>> add_fn(2,3) call add_fn (): 5 >>>
三 偏函数:
先不说偏函数的定义,我们慢慢往下看,当然这里的偏函数不是指的数学上 的偏函数(而且数学上的偏函数我早就已经还给教我数学的体育老师了)
我们先自己定义一个函数:
>>> def han(x,odd = True): ... a = 1 if odd else 2 ... return [i for i in range(a,x, 2)] ... >>> L = han(10) >>> L [1, 3, 5, 7, 9] >>> 该函数传入数值 ,还有一个默认参数 odd 默认值是True,当odd = True 的时候,生成一个奇数列表
当我们想生成一个偶数列表的时候,我们可以这样做:
>>> han(10,odd = False) [2, 4, 6, 8] >>>
假如我们想频繁的使用这个函数的时候,一遍又一遍的修改是很麻烦的,于是乎我们可以这样做:
>>> def han2(x,odd = False): ... return han(x,odd) ... >>> han2(10) [2, 4, 6, 8] >>>
这样做离所谓的偏函数不远了
python中有一个模块叫做functools,该模块提供了很多使用的功能,其中就有偏函数(partial function)的功能。
偏函数让我们不用自己定义函数:
>>> import functools >>> han2 = functools.partial(han,odd = False) >>> han2(10) [2, 4, 6, 8] >>>
我们做个小测试:
>>> print(type(han),type(han2)) <class 'function'> <class 'functools.partial'> >>> 从输出结果我们可以看出,han类型是一个函数,han2类型不是一个函数 而是functools.partial(偏函数)类型。 但我们平常使用的时候可以把han2当作成一个函数使用。
看过三国的应该都知道偏将军一职位,官制中,系将军的辅佐,与裨将军两者都为杂号将军;偏函数,其实是函数的辅佐。
偏函数的作用就是:将所作用的函数作为partial()函数的第一个参数,原函数的各个参数依次作为partial()函数的后续参数,原函数有关键字参数的一定要带上关键字,没有的话,按原有参数顺序进行补充。偏函数的第二个部分(可变参数),按原有函数的参数顺序(必须是有序)进行补充,参数将作用在原函数上。
后续我还会 在写篇对装饰器 和偏函数理解略深度的博客。
相关文章推荐
- Python的函数式编程-传入函数、排序算法、函数作为返回值、匿名函数、偏函数、装饰器
- Learning Python 012 函数式编程 2 返回函数 匿名函数 装饰器 偏函数
- Learning Python 012 函数式编程 2 返回函数 匿名函数 装饰器 偏函数
- python函数式编程之匿名函数、装饰器、偏函数
- 【Python】[函数式编程]高阶函数,返回函数,装饰器,偏函数
- Python入门 第四天(函数式编程、map、reduce、filter、排序函数、函数返回函数、闭包、匿名函数lambda)
- 【语言工具】Python闭包,装饰器,生成器,偏函数,函数式编程,lamda,map,reduce,filter
- python核心编程-函数-装饰器
- python -- 函数以及函数式编程
- python 学习笔记---函数式编程之高阶函数
- python基础之高阶函数、匿名函数 、装饰器,文件的读写
- python函数式编程内建函数filter,map,reduce函数
- [Python]函数式编程的4个常用内建函数
- python 装饰器的函数式编程
- Python 函数式编程--返回函数
- python浓缩(11)函数和函数式编程
- Python函数式编程之高阶函数
- Python 函数式编程--匿名函数Lambda
- python3 第二十三章 - 函数式编程之Partial function(偏函数)
- Python学习(20):Python函数(4):关于函数式编程的内建函数