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文件和目录操作函数小结
Jul 11 Python
import的本质解析
Oct 30 Python
python正则表达式面试题解答
Apr 28 Python
python 爬虫 批量获取代理ip的实例代码
May 22 Python
Python将8位的图片转为24位的图片实现方法
Oct 24 Python
详解pyenv下使用python matplotlib模块的问题解决
Nov 29 Python
Python按钮的响应事件详解
Mar 04 Python
postman模拟访问具有Session的post请求方法
Jul 15 Python
django有外键关系的两张表如何相互查找
Feb 10 Python
python实现飞船大战
Apr 24 Python
python函数map()和partial()的知识点总结
May 26 Python
python可视化 matplotlib画图使用colorbar工具自定义颜色
Dec 07 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
第十二节--类的自动加载
2006/11/16 PHP
用sql命令修改数据表中的一个字段为非空(not null)的语句
2010/06/04 PHP
PHP递归创建多级目录
2015/11/05 PHP
用户注册常用javascript代码
2009/08/29 Javascript
ExtJs使用IFrame的实现代码
2010/03/24 Javascript
JQuery入门——事件切换之toggle()方法应用介绍
2013/02/05 Javascript
jquery中插件实现自动添加用户的具体代码
2013/11/15 Javascript
JS中的异常处理方法分享
2013/12/22 Javascript
JQuery处理json与ajax返回JSON实例代码
2014/01/03 Javascript
JavaScript通过正则表达式实现表单验证电话号码
2014/03/07 Javascript
jQuery窗口、文档、网页各种高度的精确理解
2014/07/02 Javascript
JavaScript中对象property的删除方法介绍
2014/12/30 Javascript
基于jquery实现鼠标左右拖动滑块滑动附源码下载
2015/12/23 Javascript
基于JavaScript实现全屏透明遮罩div层锁屏效果
2016/01/26 Javascript
JavaScript中函数声明与函数表达式的区别详解
2016/08/18 Javascript
学习vue.js计算属性
2016/12/03 Javascript
基于Javascript倒计时效果
2016/12/22 Javascript
JS计算斐波拉切代码实例
2019/09/12 Javascript
解决echarts图表使用v-show控制图表显示不全的问题
2020/07/19 Javascript
小程序实现可拖动的悬浮按钮
2020/09/07 Javascript
[05:01]3.19DOTA2发布会 我们都是刀塔人
2014/03/25 DOTA
python+mysql实现简单的web程序
2014/09/11 Python
跟老齐学Python之编写类之一创建实例
2014/10/11 Python
Python的装饰器模式与面向切面编程详解
2015/06/21 Python
Python实现字符串的逆序 C++字符串逆序算法
2020/05/28 Python
Ubuntu18.04下python版本完美切换的解决方法
2019/06/14 Python
PyQT实现菜单中的复制,全选和清空的功能的方法
2019/06/17 Python
在PyCharm的 Terminal(终端)切换Python版本的方法
2019/08/02 Python
pymysql模块使用简介与示例
2020/11/17 Python
Html5中localStorage存储JSON数据并读取JSON数据的实现方法
2017/02/13 HTML / CSS
英国HYPE双肩包官网:英国本土时尚潮牌
2018/09/26 全球购物
澳大利亚最大的百货公司:Myer
2018/12/21 全球购物
体育教育个人自荐信范文
2013/12/01 职场文书
小学教学随笔感言
2014/02/26 职场文书
就业意向书范本
2015/05/11 职场文书
教师专业技术工作总结2015
2015/05/13 职场文书