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 相关文章推荐
Python3指定路径寻找符合匹配模式文件
May 22 Python
Python正则表达式分组概念与用法详解
Jun 24 Python
Python实现可自定义大小的截屏功能
Jan 20 Python
numpy.delete删除一列或多列的方法
Apr 03 Python
Ubuntu下升级 python3.7.1流程备忘(推荐)
Dec 10 Python
基于python实现自动化办公学习笔记(CSV、word、Excel、PPT)
Aug 06 Python
Python抓包程序mitmproxy安装和使用过程图解
Mar 02 Python
浅谈Python 函数式编程
Jun 20 Python
Python实例方法、类方法、静态方法区别详解
Sep 05 Python
Python使用pickle进行序列化和反序列化的示例代码
Sep 22 Python
Python爬虫抓取论坛关键字过程解析
Oct 19 Python
Python使用paramiko连接远程服务器执行Shell命令的实现
Mar 04 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中文分词的简单实现代码分享
2011/07/17 PHP
php 操作数组(合并,拆分,追加,查找,删除等)
2012/07/20 PHP
Windows平台实现PHP连接SQL Server2008的方法
2017/07/26 PHP
javascript英文日期(有时间)选择器
2007/05/02 Javascript
一个简单的js渐显(fadeIn)渐隐(fadeOut)类
2010/06/19 Javascript
JS中confirm,alert,prompt函数区别分析
2011/01/17 Javascript
jQuery文本框(input textare)事件绑定方法教程
2013/04/24 Javascript
JQuery写动态树示例代码
2013/07/31 Javascript
js实现浏览器的各种菜单命令比如打印、查看源文件等等
2013/10/24 Javascript
javascript动态添加、修改、删除对象的属性与方法详解
2014/01/27 Javascript
JavaScript事件委托的技术原理探讨示例
2014/04/17 Javascript
jQuery绑定事件on()与弹窗的简要概述
2016/04/27 Javascript
浅析jquery如何判断滚动条滚到页面底部并执行事件
2016/04/29 Javascript
PassWord输入框代码分享
2016/06/07 Javascript
nodeJS删除文件方法示例
2016/12/25 NodeJs
jQuery滚动监听实现商城楼梯式导航效果
2017/03/06 Javascript
Javascript 一些需要注意的细节(必看篇)
2017/07/08 Javascript
JS中使用new Option()实现时间联动效果
2018/12/10 Javascript
图解NodeJS实现登录注册功能
2019/09/16 NodeJs
JavaScript 实现同时选取多个时间段的方法
2019/10/17 Javascript
JS创建自定义对象的六种方法总结
2020/12/15 Javascript
[03:49]辉夜杯现场龙骑士COSER秀情商“我喜欢芬队!”
2015/12/27 DOTA
[01:18:36]LGD vs VP Supermajor 败者组决赛 BO3 第一场 6.10
2018/07/04 DOTA
Python读csv文件去掉一列后再写入新的文件实例
2017/12/28 Python
解决tensorflow由于未初始化变量而导致的错误问题
2020/01/06 Python
CSS3制作ajax loader icon实现思路及代码
2013/08/25 HTML / CSS
Champion官网:美国冠军运动服装
2017/01/25 全球购物
BNKR中国官网:带你感受澳洲领先潮流时尚
2018/08/21 全球购物
说说你所熟悉或听说过的j2ee中的几种常用模式?及对设计模式的一些看法
2012/05/24 面试题
高中自我鉴定
2013/12/20 职场文书
光学与应用专业毕业生求职信
2014/09/01 职场文书
婚礼庆典答谢词
2015/01/20 职场文书
golang switch语句的灵活写法介绍
2021/05/06 Golang
Python实战之OpenCV实现猫脸检测
2021/06/26 Python
sentinel支持的redis高可用集群配置详解
2022/04/01 Redis
windows11选中自动复制怎么开启? Win11自动复制所选内容的方法
2022/07/23 数码科技