1. 什么是偏函数?
偏函数partial是functools 模块里提供的一个内置函数。那偏函数有什么用呢?
我们知道函数在执行时,要带上必要的参数进行调用。那如果我们知道一些参数是不变的或者说大多情况下是不变的。那我们是不是可以在调用函数时,只传递那几个改变的参数,不变的参数是不是可以用一个“东西”装起来,而这个“东西”就是偏函数。
为了便于进一步理解,我们将偏函数和装饰器对比分析一下:
装饰器能够改变一个函数的行为,而偏函数不能改变一个函数的行为。
偏函数是在已有的函数基础上生成一个新的函数,这新函数的功能和已有函数相同,但是,这个新函数的部分参数已被偏函数确定。
简单来说,偏函数适合当函数中的某些参数值在某些场景下是定值的时候,将其简化。什么意思呢?就是省略某些不变的参数,使得代码会更加简洁。
2. 偏函数使用和实际应用
偏函数是将所要承载的函数作为partial()函数的第一个参数,原函数的各个参数依次作为partial()函数后续的参数。
”偏函数partial在functools 模块,从functools 调用偏函数partial
语句“from functools import partial”偏函数partial在functools 模块,从functools 调用偏函数partial;
定义函数add(),该函数有两个参数a和b。
正常情况下,调用add()函数,我们分别给a和b赋值4,5,然后经过调用、返回和输出结果:20
那如何使用偏函数呢?偏函数是将所要承载的函数作为partial()函数的第一个参数,那不就等价于partial(add, 4),第二个参数为4,我们设置的。只要确保偏函数partial()的第一个参数是所要承载的函数。后面第二个参数、第三个参数都可以自己设定。
下面我们通过一些实际场景来看看,如何使用。
使用场景
假设需要设定一个程序,其功能在dest目录下新建若干文件夹,那么如何实现呢?
一般情况下,常见的实现功能,具体如下:
该程序得到功能简单,代码简洁,符合要求。但是小小的瑕疵,我们知道每次都是在dest目录下新建文件夹,既然创建文件夹的路径是固定(参数不变),那是不是可以不用传递dest参数呢?想想我们刚才学的偏函数,是不是和我们学的偏函数应用场景符合,那我们采用偏函数实现功能,具体如下
dest_join是通过偏函数partial()创建的一个新的函数,而不是赋值变量。dest_join这个函数在执行时,先调用os.path.join并将'./dest'作为参数传给join,然后再传入“dir”。
假设我们0需要写一个方法 (Info)来获取用户的个人信息,包括国籍,所在地,姓名,年龄四个参数。那么一般的实现功能代码,如下所示
我们发现国籍和所在地是中国人和西安,由于国籍和所在地已经确定=且不变,那么只有姓名和年龄是改变的,我们是否能采用偏函数实现?答案是肯定,具体代码如下图所示
偏函数的总结
偏函数是将所要承载的函数作为partial()函数的第一个参数,原函数的各个参数依次作为partial()函数后续的参数。
当参数很多时,用偏函数能免去大量的反复输入相同参数的麻烦
#Python知识分享#
Python核心系列
Python核心技术——enumerate使用
Python核心技术——自定义可迭代对象
Python核心技术——循环与迭代(下)
领取专属 10元无门槛券
私享最新 技术干货