首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python核心技术之偏函数(partial)

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核心技术——循环与迭代(下)

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230214A05FHC00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券