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之私有函数和专有方法
Oct 24 Python
深入理解python中的闭包和装饰器
Jun 12 Python
python 捕获shell脚本的输出结果实例
Jan 04 Python
python爬虫之百度API调用方法
Jun 11 Python
python实现隐马尔科夫模型HMM
Mar 25 Python
使用python语言,比较两个字符串是否相同的实例
Jun 29 Python
Python实现的建造者模式示例
Aug 06 Python
Pycharm无法显示动态图片的解决方法
Oct 28 Python
对pandas读取中文unicode的csv和添加行标题的方法详解
Dec 12 Python
Pytorch实现GoogLeNet的方法
Aug 18 Python
python中关于数据类型的学习笔记
Jul 19 Python
Python logging日志库空间不足问题解决
Sep 14 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中文版
2006/10/09 PHP
php 高性能书写
2010/12/11 PHP
PHP学习散记_编码(json_encode 中文不显示)
2011/11/10 PHP
PHP创建桌面快捷方式的实例代码
2014/02/17 PHP
Laravel实现autoload方法详解
2017/05/07 PHP
php获取数据库结果集方法(推荐)
2017/06/01 PHP
PHP常用字符串函数小结(推荐)
2018/08/05 PHP
javascript下查找父节点的简单方法
2007/08/13 Javascript
Prototype源码浅析 Number部分
2012/01/16 Javascript
jQuery获取样式中的背景颜色属性值/颜色值
2012/12/17 Javascript
JavaScript地图拖动功能SpryMap的简单实现
2013/07/17 Javascript
学习JavaScript事件流和事件处理程序
2016/01/25 Javascript
javascript函数自动执行常用方法汇总
2016/03/28 Javascript
JavaScript的ExtJS框架中数面板TreePanel的使用实例解析
2016/05/21 Javascript
js实现模糊匹配功能
2017/02/15 Javascript
JS实现字符串翻转的方法分析
2018/08/31 Javascript
vue中使用element组件时事件想要传递其他参数的问题
2019/09/18 Javascript
vue 全局封装loading加载教程(全局监听)
2020/11/05 Javascript
了不起的11个JavaScript代码重构最佳实践小结
2021/01/11 Javascript
Python实现将Excel转换成xml的方法示例
2018/08/25 Python
解决Python plt.savefig 保存图片时一片空白的问题
2019/01/10 Python
Python数据可视化库seaborn的使用总结
2019/01/15 Python
python操作excel让工作自动化
2019/08/09 Python
使用python实现数组、链表、队列、栈的方法
2019/12/20 Python
Python安装OpenCV的示例代码
2020/03/05 Python
关于Python turtle库使用时坐标的确定方法
2020/03/19 Python
Python爬虫入门有哪些基础知识点
2020/06/02 Python
Darphin迪梵官网: 来自巴黎,植物和精油调制的护肤品牌
2016/10/11 全球购物
美国奢侈品购物平台:Orchard Mile
2018/05/02 全球购物
Jacadi Paris英国官网:法国童装品牌
2019/08/09 全球购物
电气自动化专业职业规划范文
2014/02/16 职场文书
家居装修公司创业计划书范文
2014/03/20 职场文书
英语故事演讲稿
2014/04/29 职场文书
三峡大坝导游词
2015/01/31 职场文书
2015年秋季灭鼠工作总结
2015/07/27 职场文书
重阳节主题班会
2015/08/17 职场文书