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 05 Python
在Python中使用lambda高效操作列表的教程
Apr 24 Python
分享Python文本生成二维码实例
Jan 06 Python
Python之Scrapy爬虫框架安装及使用详解
Nov 16 Python
Python学生成绩管理系统简洁版
Apr 05 Python
Python在groupby分组后提取指定位置记录方法
Apr 20 Python
NLTK 3.2.4 环境搭建教程
Sep 19 Python
Python OS模块实例详解
Apr 15 Python
华为校园招聘上机笔试题 扑克牌大小(python)
Apr 22 Python
wxpython实现按钮切换界面的方法
Nov 19 Python
python中导入 train_test_split提示错误的解决
Jun 19 Python
Pytorch如何切换 cpu和gpu的使用详解
Mar 01 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的ajax框架xajax入门与试用介绍
2010/12/19 PHP
兼容性比较好的PHP生成缩略图的代码
2011/01/12 PHP
PHP程序员基本要求和必备技能
2014/05/09 PHP
ubuntu下配置nginx+php+mysql详解
2015/09/10 PHP
PHP实现链式操作的三种方法详解
2017/11/16 PHP
通过代码实例解析PHP session工作原理
2020/12/11 PHP
Extjs4 GridPanel的主要配置参数详细介绍
2013/04/18 Javascript
解析Javascript小括号“()”的多义性
2013/12/03 Javascript
jquery.post用法关于type设置问题补充
2014/01/03 Javascript
js或jquery实现页面打印可局部打印
2014/03/27 Javascript
js计算文本框输入的字符数
2015/10/23 Javascript
javascript图片预加载完整实例
2015/12/10 Javascript
jquery点击改变class并toggle的实现代码
2016/05/15 Javascript
JS对大量数据进行多重过滤的方法
2016/11/04 Javascript
vue.js中v-on:textInput无法执行事件问题的解决过程
2017/07/12 Javascript
详解angular路由高亮之RouterLinkActive
2018/04/28 Javascript
vue2.x集成百度UEditor富文本编辑器的方法
2018/09/21 Javascript
谈谈IntersectionObserver懒加载的具体使用
2019/10/15 Javascript
JavaScript中的this原理及6种常见使用场景详解
2020/02/14 Javascript
详细分析React 表单与事件
2020/07/08 Javascript
Python3.2中的字符串函数学习总结
2015/04/23 Python
解决Python 遍历字典时删除元素报异常的问题
2016/09/11 Python
用Python实现随机森林算法的示例
2017/08/24 Python
浅谈Python用QQ邮箱发送邮件时授权码的问题
2018/01/29 Python
python与caffe改变通道顺序的方法
2018/08/04 Python
详解python中list的使用
2019/03/15 Python
python3中property使用方法详解
2019/04/23 Python
结合OpenCV与TensorFlow进行人脸识别的实现
2019/10/10 Python
Django xadmin开启搜索功能的实现
2019/11/15 Python
python用quad、dblquad实现一维二维积分的实例详解
2019/11/20 Python
2014自主招生自荐信策略
2014/01/27 职场文书
《胖乎乎的小手》教学反思
2014/02/26 职场文书
企业办公室岗位职责
2014/03/12 职场文书
国际经济贸易专业自荐信
2014/06/13 职场文书
租房协议书
2014/09/12 职场文书
springboot 自定义配置 解决Boolean属性不生效
2022/03/18 Java/Android