Python偏函数Partial function使用方法实例详解


Posted in Python onJune 17, 2020

Python的functools模块提供了很多有用的功能,其中一个就是偏函数(Partial function)。

要注意,这里的偏函数和数学意义上的偏函数不一样。

在介绍函数参数的时候,我们讲到,通过设定参数的默认值,可以降低函数调用的难度。而偏函数也可以做到这一点。举例如下:

int()函数可以把字符串转换为整数,当仅传入字符串时,int()函数默认按十进制转换:

int('12345')
12345

但int()函数还提供额外的base参数,默认值为10。如果传入base参数,就可以做N进制的转换:

int('12345', base=8)
5349

int('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。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python 获得任意路径下的文件及其根目录的方法
Feb 16 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
Jun 14 Python
Django ORM 自定义 char 类型字段解析
Aug 09 Python
解决Python使用列表副本的问题
Dec 19 Python
新年福利来一波之Python轻松集齐五福(demo)
Jan 20 Python
python实现IOU计算案例
Apr 12 Python
Python while true实现爬虫定时任务
Jun 08 Python
Python数据相关系数矩阵和热力图轻松实现教程
Jun 16 Python
python调用有道智云API实现文件批量翻译
Oct 10 Python
pycharm配置python 设置pip安装源为豆瓣源
Feb 05 Python
Python .py生成.pyd文件并打包.exe 的注意事项说明
Mar 04 Python
Python如何让字典保持有序排列
Apr 29 Python
详解Python IO口多路复用
Jun 17 #Python
基于keras中的回调函数用法说明
Jun 17 #Python
Python学习之路安装pycharm的教程详解
Jun 17 #Python
Python闭包及装饰器运行原理解析
Jun 17 #Python
浅谈Python协程
Jun 17 #Python
使用K.function()调试keras操作
Jun 17 #Python
哪些是python中web开发框架
Jun 17 #Python
You might like
php.ini中date.timezone设置分析
2011/07/29 PHP
php_imagick实现图片剪切、旋转、锐化、减色或增加特效的方法
2014/12/15 PHP
php 从指定数字中获取随机组合的简单方法(推荐)
2017/04/05 PHP
jquery tools系列 expose 学习
2009/09/06 Javascript
JQuery 操作Javascript对象和数组的工具函数小结
2010/01/22 Javascript
A标签中通过href和onclick传递的this对象实现思路
2013/04/19 Javascript
js数值和和字符串进行转换时可以对不同进制进行操作
2014/03/05 Javascript
使用js操作css实现js改变背景图片示例
2014/03/10 Javascript
使用百度地图api实现根据地址查询经纬度
2014/12/11 Javascript
微信小程序 action-sheet 反馈上拉菜单简单实例
2017/05/11 Javascript
详解Vue.js搭建路由报错 router.map is not a function
2017/06/27 Javascript
详谈js原型继承的一些问题
2017/09/06 Javascript
vue init webpack myproject构建项目 ip不能访问的解决方法
2018/03/20 Javascript
详解使用Next.js构建服务端渲染应用
2018/07/10 Javascript
vue实现分页栏效果
2019/06/28 Javascript
[03:09]DOTA2亚洲邀请赛 LGD战队出场宣传片
2015/02/07 DOTA
[03:55]DOTA2完美大师赛选手传记——LFY.MONET
2017/11/18 DOTA
利用Fn.py库在Python中进行函数式编程
2015/04/22 Python
python函数的5种参数详解
2017/02/24 Python
基于Python数据可视化利器Matplotlib,绘图入门篇,Pyplot详解
2017/10/13 Python
python得到一个excel的全部sheet标签值方法
2018/12/10 Python
对python numpy.array插入一行或一列的方法详解
2019/01/29 Python
Python异常模块traceback用法实例分析
2019/10/22 Python
html5实现微信打飞机游戏
2014/03/27 HTML / CSS
英国皇家邮政海外旗舰店:Royal Mail
2018/02/21 全球购物
澳大利亚汽车零部件、音响及配件超市:Automotive Superstore
2018/06/19 全球购物
在职人员函授期间自我评价分享
2013/11/08 职场文书
乔丹名人堂演讲稿
2014/05/24 职场文书
宣传工作经验材料
2014/06/02 职场文书
安全先进个人材料
2014/12/29 职场文书
清洁工岗位职责
2015/02/13 职场文书
总经理年会致辞
2015/07/29 职场文书
2016年“5.12”护士节致辞
2015/07/31 职场文书
Python MNIST手写体识别详解与试练
2021/11/07 Python
世界十大评分最高的动漫,CLANNAD上榜,第八赚足人们眼泪
2022/03/18 日漫
spring IOC容器的Bean管理XML自动装配过程
2022/05/30 Java/Android