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使用xlrd模块读写Excel文件的方法
May 06 Python
python3+PyQt5重新实现QT事件处理程序
Apr 19 Python
解决Shell执行python文件,传参空格引起的问题
Oct 30 Python
python实现可逆简单的加密算法
Mar 22 Python
Python Django框架单元测试之文件上传测试示例
May 17 Python
python做反被爬保护的方法
Jul 01 Python
Djang的model创建的字段和参数详解
Jul 27 Python
Django模型修改及数据迁移实现解析
Aug 01 Python
基于CentOS搭建Python Django环境过程解析
Aug 24 Python
Python+OpenCV图像处理—— 色彩空间转换
Oct 22 Python
python实现企业微信定时发送文本消息的示例代码
Nov 24 Python
python中如何对多变量连续赋值
Jun 03 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 文件夹删除、php清除缓存程序
2009/08/25 PHP
一个完整的PHP类包含的七种语法说明
2015/06/04 PHP
Laravel4中的Validator验证扩展用法详解
2016/07/26 PHP
strpos() 函数判断字符串中是否包含某字符串的方法
2019/01/16 PHP
jquery 循环显示div的示例代码
2013/10/18 Javascript
在页面中js获取光标/鼠标的坐标及光标的像素坐标
2013/11/11 Javascript
JavaScript阻止浏览器返回按钮的方法
2015/03/18 Javascript
jquery分页插件jquery.pagination.js实现无刷新分页
2016/04/01 Javascript
Vuejs第十二篇之动态组件全面解析
2016/09/09 Javascript
jQuery EasyUI tree 使用拖拽时遇到的错误小结
2016/10/10 Javascript
浅述Javascript的外部对象
2016/12/07 Javascript
js验证手机号、密码、短信验证码代码工具类
2020/06/24 Javascript
基于JS实现仿百度百家主页的轮播图效果
2017/03/06 Javascript
AngularJS实现select的ng-options功能示例
2017/07/12 Javascript
vue获取元素宽、高、距离左边距离,右,上距离等还有XY坐标轴的方法
2018/09/05 Javascript
Node Mongoose用法详解【Mongoose使用、Schema、对象、model文档等】
2020/05/13 Javascript
vue自定义指令限制输入框输入值的步骤与完整代码
2020/08/30 Javascript
python中文编码问题小结
2014/09/28 Python
Python内置函数 next的具体使用方法
2017/11/24 Python
Python学习_几种存取xls/xlsx文件的方法总结
2018/05/03 Python
Python爬虫之pandas基本安装与使用方法示例
2018/08/08 Python
Python实现计算对象的内存大小示例
2019/07/10 Python
python读写文件write和flush的实现方式
2020/02/21 Python
python MultipartEncoder传输zip文件实例
2020/04/07 Python
浅析HTML5中的download属性使用
2019/03/13 HTML / CSS
Charlotte Tilbury澳大利亚官网:英国美妆品牌
2018/10/05 全球购物
奥地利智能家居和智能生活网上商店:tink.at
2019/10/07 全球购物
DBA数据库管理员JAVA程序员架构师必看
2016/02/07 面试题
高三自我评价
2014/02/01 职场文书
幼儿园儿童节主持词
2014/03/21 职场文书
六一儿童节活动总结
2014/08/27 职场文书
工商局副局长个人对照检查材料
2014/09/25 职场文书
债务追讨授权委托书范本
2014/10/16 职场文书
2014年个人年终总结
2015/03/09 职场文书
Python 多线程之threading 模块的使用
2021/04/14 Python
JavaWeb实现显示mysql数据库数据
2022/03/19 Java/Android