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读写文本文件及编写简单的文本编辑器
Mar 11 Python
Python中进程和线程的区别详解
Oct 29 Python
python获取时间及时间格式转换问题实例代码详解
Dec 06 Python
python3 实现验证码图片切割的方法
Dec 07 Python
20行python代码实现人脸识别
May 05 Python
Pandas之ReIndex重新索引的实现
Jun 25 Python
Python 脚本实现淘宝准点秒杀功能
Nov 13 Python
PyQt5 closeEvent关闭事件退出提示框原理解析
Jan 08 Python
Python pysnmp使用方法及代码实例
Aug 24 Python
如何使用python-opencv批量生成带噪点噪线的数字验证码
Dec 21 Python
python实现三种随机请求头方式
Jan 05 Python
Python数据分析入门之数据读取与存储
May 13 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中通过curl模拟登陆discuz论坛的实现代码
2012/02/16 PHP
在PHP中设置、使用、删除Cookie的解决方法
2013/05/06 PHP
PHP数组操作类实例
2015/07/11 PHP
弹出模态框modal的实现方法及实例
2017/09/19 PHP
js前台分页显示后端JAVA数据响应
2013/03/18 Javascript
解析javascript 实用函数的使用详解
2013/05/10 Javascript
jQuery淡入淡出元素让其效果更为生动
2014/09/01 Javascript
jQuery中[attribute]选择器用法实例
2014/12/31 Javascript
jQuery实现点击表格单元格就可以编辑内容的方法【测试可用】
2016/08/01 Javascript
js获取元素的标签名实现方法
2016/10/08 Javascript
在js里怎么实现Xcode里的callFuncN方法(详解)
2016/11/05 Javascript
Javascript 判断两个IP是否在同一网段实例代码
2016/11/28 Javascript
js模态对话框使用方法详解
2017/02/16 Javascript
jQuery插件zTree实现删除树子节点的方法示例
2017/03/08 Javascript
Angular中响应式表单的三种更新值方法详析
2017/08/22 Javascript
Vue源码中要const _toStr = Object.prototype.toString的原因分析
2018/12/09 Javascript
微信小程序rich-text富文本用法实例分析
2019/05/20 Javascript
微信小程序tabBar 返回tabBar不刷新页面
2019/07/25 Javascript
[05:35]DOTA2英雄梦之声_第13期_拉比克
2014/06/21 DOTA
Python 解析XML文件
2009/04/15 Python
Python实现获取域名所用服务器的真实IP
2015/10/25 Python
Django基础知识与基本应用入门教程
2018/07/20 Python
Python WEB应用部署的实现方法
2019/01/02 Python
浅析Django中关于session的使用
2019/12/30 Python
html5 datalist 选中option选项后的触发事件
2020/03/05 HTML / CSS
LivingSocial爱尔兰:爱尔兰本地优惠
2018/08/10 全球购物
吉力贝官方网站:Jelly Belly
2019/03/11 全球购物
英国在线玫瑰专家:InterRose
2019/12/01 全球购物
美国主要的特色咖啡和茶公司:Peet’s Coffee
2020/02/14 全球购物
Myprotein西班牙官网:欧洲第一大运动营养品牌
2020/02/24 全球购物
职专应届生求职信
2013/11/16 职场文书
幼儿教师思想汇报
2014/01/10 职场文书
宠物店的创业计划书范文
2014/01/11 职场文书
2014年班务工作总结
2014/12/02 职场文书
汽车4S店销售经理岗位职责
2015/04/02 职场文书
2015年学生会主席工作总结
2015/04/21 职场文书