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升级提示Tkinter模块找不到的解决方法
Aug 22 Python
python实现实时监控文件的方法
Aug 26 Python
Python实现ssh批量登录并执行命令
Oct 25 Python
Python使用matplotlib实现的图像读取、切割裁剪功能示例
Apr 28 Python
Python基于jieba库进行简单分词及词云功能实现方法
Jun 16 Python
Python使用pandas处理CSV文件的实例讲解
Jun 22 Python
Python调用adb命令实现对多台设备同时进行reboot的方法
Oct 15 Python
python 解决flask 图片在线浏览或者直接下载的问题
Jan 09 Python
Pygame框架实现飞机大战
Aug 07 Python
python 装饰器的实际作用有哪些
Sep 07 Python
python的链表基础知识点
Sep 13 Python
Python使用windows设置定时执行脚本
Nov 12 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实现定时生成HTML网站首页实例代码
2008/11/20 PHP
Laravel中正确地返回HTTP状态码方法示例
2019/09/10 PHP
用tip解决Ext列宽度不够的问题
2008/12/13 Javascript
事件绑定之小测试  onclick && addEventListener
2011/07/31 Javascript
js编码之encodeURIComponent使用介绍(asp,php)
2012/03/01 Javascript
jQuery之选项卡的简单实现
2014/02/28 Javascript
NodeJS学习笔记之FS文件模块
2015/01/13 NodeJs
JavaScript数组Array对象增加和删除元素方法总结
2015/01/20 Javascript
JS上传图片前实现图片预览效果的方法
2015/03/02 Javascript
javascript中返回顶部按钮的实现
2015/05/05 Javascript
浅析jquery与checkbox的checked属性的问题
2016/04/27 Javascript
使用jquery/js获取iframe父子级、同级获取元素的方法
2016/08/05 Javascript
AngularJS 霸道的过滤器小结
2017/04/26 Javascript
详解vue-cli 接口代理配置
2017/12/13 Javascript
Nodejs模块载入运行原理
2018/02/23 NodeJs
深入了解javascript 数组的sort方法
2018/06/01 Javascript
three.js实现炫酷的全景3D重力感应
2018/12/30 Javascript
React通过redux-persist持久化数据存储的方法示例
2019/02/14 Javascript
JavaScript中的this原理及6种常见使用场景详解
2020/02/14 Javascript
[01:28]2014DOTA2国际邀请赛中国区预选赛四大豪门直升机抵达会场
2014/05/24 DOTA
[01:11:27]2018DOTA2亚洲邀请赛小组赛 A组加赛 Newbee vs Optic
2018/04/03 DOTA
[50:34]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python检查序列seq是否含有aset中项的方法
2015/06/30 Python
python微信跳一跳游戏辅助代码解析
2018/01/29 Python
PyTorch CNN实战之MNIST手写数字识别示例
2018/05/29 Python
Python实现字典(dict)的迭代操作示例
2018/06/05 Python
用Python写一个模拟qq聊天小程序的代码实例
2019/03/06 Python
django 自定义filter 判断if var in list的例子
2019/08/20 Python
Python函数式编程指南:对生成器全面讲解
2019/11/19 Python
基于Python fminunc 的替代方法
2020/02/29 Python
python 5个顶级异步框架推荐
2020/09/09 Python
数控技术专业推荐信
2013/11/01 职场文书
广告传媒专业应届生求职信
2014/03/01 职场文书
机关道德讲堂实施方案
2014/03/15 职场文书
金融事务专业求职信
2014/04/25 职场文书
导游词之西递宏村
2019/12/10 职场文书