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 相关文章推荐
使用django-suit为django 1.7 admin后台添加模板
Nov 18 Python
Python 抓取动态网页内容方案详解
Dec 25 Python
详解python调度框架APScheduler使用
Mar 28 Python
Python 获得13位unix时间戳的方法
Oct 20 Python
Python语言描述随机梯度下降法
Jan 04 Python
Face++ API实现手势识别系统设计
Nov 21 Python
详解Python 定时框架 Apscheduler原理及安装过程
Jun 14 Python
Python3 执行系统命令并获取实时回显功能
Jul 09 Python
Django后台管理系统的图文使用教学
Jan 20 Python
python如何通过闭包实现计算器的功能
Feb 22 Python
Python3标准库之threading进程中管理并发操作方法
Mar 30 Python
在CentOS7下安装Python3教程解析
Jul 09 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
完美解决thinkphp验证码出错无法显示的方法
2014/12/09 PHP
Zend Framework校验器Zend_Validate用法详解
2016/12/09 PHP
js function定义函数使用心得
2010/04/15 Javascript
原创javascript小游戏实现代码
2010/08/19 Javascript
jquery应该如何来设置改变按钮input的onclick事件
2012/12/10 Javascript
JS将表单导出成EXCEL的实例代码
2013/11/11 Javascript
JS延迟加载加快页面打开速度示例代码
2013/12/30 Javascript
DOM基础教程之模型中的模型节点
2015/01/19 Javascript
Bootstrap每天必学之轮播(Carousel)插件
2016/04/25 Javascript
jQuery 3 中的新增功能汇总介绍
2016/06/12 Javascript
快速掌握jQuery插件开发
2017/01/19 Javascript
Web纯前端“旭日图”实现元素周期表
2017/03/10 Javascript
JS实现列表页面隔行变色效果
2017/03/25 Javascript
浅谈vue路径优化之resolve
2017/10/13 Javascript
js实现一个简单的MVVM框架示例
2018/01/15 Javascript
详解VueJs中的V-bind指令
2018/05/03 Javascript
解决layui弹出层layer的area过大被遮挡的问题
2019/09/21 Javascript
Python通过90行代码搭建一个音乐搜索工具
2015/07/29 Python
八大排序算法的Python实现
2021/01/28 Python
Python序列操作之进阶篇
2016/12/08 Python
获取Django项目的全部url方法详解
2017/10/26 Python
用tensorflow构建线性回归模型的示例代码
2018/03/05 Python
python时间time模块处理大全
2020/10/25 Python
解决pycharm不能自动保存在远程linux中的问题
2021/02/06 Python
详解HTML5中的picture元素响应式处理图片
2018/01/03 HTML / CSS
Viking Direct荷兰:购买办公用品
2019/06/20 全球购物
亿企通软件测试面试题
2012/04/10 面试题
光荣入党自我鉴定
2014/01/22 职场文书
开会迟到检讨书
2014/02/03 职场文书
洗车工岗位职责
2014/03/15 职场文书
初中班主任评语
2014/04/24 职场文书
关于学习的演讲稿
2014/05/10 职场文书
践行党的群众路线心得体会
2014/11/05 职场文书
2015年乡镇残联工作总结
2015/05/13 职场文书
初一军训感言
2015/08/01 职场文书
springmvc直接不经过controller访问WEB-INF中的页面问题
2022/02/24 Java/Android