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 datetime时间格式化去掉前导0
Jul 31 Python
python实现list元素按关键字相加减的方法示例
Jun 09 Python
Python实现数据库并行读取和写入实例
Jun 09 Python
Python时间的精准正则匹配方法分析
Aug 17 Python
Python使用Selenium+BeautifulSoup爬取淘宝搜索页
Feb 24 Python
Python 元类实例解析
Apr 04 Python
matplotlib savefig 保存图片大小的实例
May 24 Python
一文了解Python并发编程的工程实现方法
May 31 Python
python 正则表达式参数替换实例详解
Jan 17 Python
Numpy一维线性插值函数的用法
Apr 22 Python
在服务器上安装python3.8.2环境的教程详解
Apr 26 Python
keras 回调函数Callbacks 断点ModelCheckpoint教程
Jun 18 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 设计模式之 单例模式
2008/12/19 PHP
PHP经典面试题集锦
2015/03/19 PHP
详解Yii2 rules 的验证规则
2016/12/02 PHP
javascript css float属性的特殊写法
2008/11/13 Javascript
in.js 一个轻量级的JavaScript颗粒化模块加载和依赖关系管理解决方案
2011/07/26 Javascript
Javascript实现的类似Google的Div拖动效果代码
2011/08/09 Javascript
jquery 简短几句代码实现给元素动态添加及获取提示信息
2011/09/01 Javascript
有效提高JavaScript执行效率的几点知识
2015/01/31 Javascript
chrome不支持form.submit的解决方案
2015/04/28 Javascript
jQuery实现TAB风格的全国省份城市滑动切换效果代码
2015/08/24 Javascript
深入理解Ajax的get和post请求
2016/06/02 Javascript
Bootstrap Metronic完全响应式管理模板之菜单栏学习笔记
2016/07/08 Javascript
用jQuery.ajaxSetup实现对请求和响应数据的过滤
2016/12/20 Javascript
简述vue中的config配置
2018/01/23 Javascript
JS前端知识点 运算符优先级,URL编码与解码,String,Math,arguments操作整理总结
2019/06/27 Javascript
nodeJS与MySQL实现分页数据以及倒序数据
2020/06/05 NodeJs
js实现带有动画的返回顶部
2020/08/09 Javascript
初步介绍Python中的pydoc模块和distutils模块
2015/04/13 Python
Python内置函数dir详解
2015/04/14 Python
python实现批量修改文件名代码
2017/09/10 Python
快速解决vue.js 模板和jinja 模板冲突的问题
2019/07/26 Python
Python3多线程版TCP端口扫描器
2019/08/31 Python
python 实现弹球游戏的示例代码
2020/11/17 Python
详解CSS3中使用gradient实现渐变效果的方法
2015/08/18 HTML / CSS
利用HTML5实现使用按钮控制背景音乐开关
2015/09/21 HTML / CSS
朗仕(Lab series)英国官网:雅诗兰黛集团男士专属护肤品牌
2017/11/28 全球购物
洛佩桑酒店官方网站:Lopesan Hotels
2019/04/15 全球购物
安全例会汇报材料
2014/08/23 职场文书
小学国旗下的演讲稿
2014/08/28 职场文书
2014法院干警廉洁警示教育思想汇报
2014/09/13 职场文书
个人查摆问题及整改措施
2014/10/16 职场文书
redis三种高可用方式部署的实现
2021/05/11 Redis
vue基于Teleport实现Modal组件
2021/05/31 Vue.js
MySQL外键约束(FOREIGN KEY)案例讲解
2021/08/23 MySQL
「海贼王」112.9万粉丝纪念图标公布
2022/03/21 日漫
Golang 切片(Slice)实现增删改查
2022/04/22 Golang