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 实现插入排序算法
Jun 05 Python
利用Python进行异常值分析实例代码
Dec 07 Python
python利用OpenCV2实现人脸检测
Apr 16 Python
Python实现的随机森林算法与简单总结
Jan 30 Python
详谈Python3 操作系统与路径 模块(os / os.path / pathlib)
Apr 26 Python
Python系统监控模块psutil功能与经典用法分析
May 24 Python
对Python实现简单的API接口实例讲解
Dec 10 Python
PyCharm 无法 import pandas 程序卡住的解决方式
Mar 09 Python
python实现文法左递归的消除方法
May 22 Python
Python使用eval函数执行动态标表达式过程详解
Oct 17 Python
python 如何引入协程和原理分析
Nov 30 Python
如何利用python实现Simhash算法
Jun 28 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
4月1日重磅发布!《星际争霸II》6.0.0版本更新
2020/04/09 星际争霸
Base64在线编码解码实现代码 演示与下载
2011/01/08 PHP
Views rows style模板重写代码
2011/05/16 PHP
php explode函数实例代码
2012/02/27 PHP
PHP获取MySql新增记录ID值的3种方法
2014/06/24 PHP
PHP打开和关闭文件操作函数总结
2014/11/18 PHP
Yii框架中sphinx索引配置方法解析
2016/10/18 PHP
Mac下php 5升级到php 7的步骤详解
2017/04/26 PHP
解析JavaScript中点号“.”的多义性
2013/12/02 Javascript
javascript调试过程中找不到哪里出错的可能原因
2013/12/16 Javascript
js跨域访问示例(客户端/服务端)
2014/05/19 Javascript
第一章之初识Bootstrap
2016/04/25 Javascript
鼠标点击input,显示瞬间的边框颜色,对之修改与隐藏实例
2016/12/26 Javascript
BootStrap3中模态对话框的使用
2017/01/06 Javascript
微信小程序实现实时圆形进度条的方法示例
2017/02/24 Javascript
canvas实现爱心和彩虹雨效果
2017/03/09 Javascript
JS 学习总结之正则表达式的懒惰性和贪婪性
2017/07/03 Javascript
简单的Vue异步组件实例Demo
2017/12/27 Javascript
详解webpack-dev-server使用http-proxy解决跨域问题
2018/01/13 Javascript
小程序和web画三角形实现解析
2019/09/02 Javascript
JS前端面试必备——基本排序算法原理与实现方法详解【插入/选择/归并/冒泡/快速排序】
2020/02/24 Javascript
three.js着色器材质的内置变量示例详解
2020/08/16 Javascript
vue 基于abstract 路由模式 实现页面内嵌的示例代码
2020/12/14 Vue.js
Python 文件操作实现代码
2009/10/07 Python
python中循环语句while用法实例
2015/05/16 Python
python实现根据指定字符截取对应的行的内容方法
2018/10/23 Python
日本化妆品植村秀俄罗斯官方网站:Shu Uemura俄罗斯
2020/02/01 全球购物
校园新闻广播稿
2014/01/10 职场文书
班主任个人工作反思
2014/04/28 职场文书
市场营销工作计划书
2014/05/06 职场文书
六查六看自查报告
2014/10/14 职场文书
小学优秀教师事迹材料
2014/12/16 职场文书
旅行社计调工作总结
2015/08/12 职场文书
2016简单的租房合同范本
2016/03/18 职场文书
Python代码,能玩30多款童年游戏!这些有几个是你玩过的
2021/04/27 Python
vue 自定义的组件绑定点击事件
2022/04/21 Vue.js