Python偏函数Partial function使用方法实例详解
作者:吞风吻雨ii 时间:2023-02-07 09:47:02
Python的functools模块提供了很多有用的功能,其中一个就是偏函数(Partial function)。
要注意,这里的偏函数和数学意义上的偏函数不一样。
在介绍函数参数的时候,我们讲到,通过设定参数的默认值,可以降低函数调用的难度。而偏函数也可以做到这一点。举例如下:
int()函数可以把字符串转换为整数,当仅传入字符串时,int()函数默认按十进制转换:
int('12345')
12345
但int()函数还提供额外的base参数,默认值为10。如果传入base参数,就可以做N进制的转换:
int('12345', base=8)
5349int('12345', 16)
74565
假设要转换大量的二进制字符串,每次都传入int(x, base=2)非常麻烦,于是,我们想到,可以定义一个int2()的函数,默认把base=2传进去:
def int2(x, base=2):
return int(x, base)
这样,我们转换二进制就非常方便了:
int2('1000000')
64
int2('1010101')
85
functools.partial就是帮助我们创建一个偏函数的,不需要我们自己定义int2(),可以直接使用下面的代码创建一个新的函数int2:
import functools
int2 = functools.partial(int, base=2)
int2('1000000')
64
int2('1010101')
85
所以,简单总结functools.partial的作用就是,把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单。
注意到上面的新的int2函数,仅仅是把base参数重新设定默认值为2,但也可以在函数调用时传入其他值:
int2('1000000', base=10)
1000000
最后,创建偏函数时,实际上可以接收函数对象、*args和**kw这3个参数,当传入:
int2 = functools.partial(int, base=2)
实际上固定了int()函数的关键字参数base,也就是:
int2('10010')
相当于:
kw = { 'base': 2 }
int('10010', **kw)
当传入:
max2 = functools.partial(max, 10)
实际上会把10作为*args的一部分自动加到左边,也就是:
max2(5, 6, 7)
相当于:
args = (10, 5, 6, 7)
max(*args)
结果为10。
来源:https://www.cnblogs.com/LMIx/p/13126655.html
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
python利用wx实现界面按钮和按钮监听和字体改变的方法
![](https://img.aspxhome.com/file/2023/0/121410_0s.jpg)
JAVA/JSP学习系列之一
TypeScript函数和类型断言实例详解
![](https://img.aspxhome.com/file/2023/1/136431_0s.jpg)
解析python 中/ 和 % 和 //(地板除)
JS的Form表单转JSON格式的操作代码
MySQL创建表操作命令分享
![](https://img.aspxhome.com/file/2023/3/76353_0s.png)
TensorFlow实现指数衰减学习率的方法
![](https://img.aspxhome.com/file/2023/9/117429_0s.jpg)
Javascript fso操作文件
mysql 5.7.12 winx64安装配置方法图文教程
Python3.5 Json与pickle实现数据序列化与反序列化操作示例
![](https://img.aspxhome.com/file/2023/1/102721_0s.png)
在线一元二次方程计算器实例(方程计算器在线计算)
一个非常实用的php文件上传类
python深度学习之多标签分类器及pytorch实现源码
![](https://img.aspxhome.com/file/2023/1/97491_0s.jpg)
使用Python实现图像标记点的坐标输出功能
![](https://img.aspxhome.com/file/2023/9/68839_0s.jpg)
在Python下进行UDP网络编程的教程
![](https://img.aspxhome.com/file/2023/0/133420_0s.png)
使用PyCharm安装pytest及requests的问题
![](https://img.aspxhome.com/file/2023/4/117984_0s.png)
tensorflow的ckpt及pb模型持久化方式及转化详解
![](https://img.aspxhome.com/file/2023/1/70801_0s.jpg)
Python迭代器和生成器介绍
![](https://img.aspxhome.com/file/2023/2/97772_0s.png)
JS获取鼠标位置距浏览器窗口距离的方法示例
![](https://img.aspxhome.com/file/2023/2/135912_0s.jpg)