Python使用functools模块中的partial函数生成偏函数


Posted in Python onJuly 02, 2016

python 中提供一种用于对函数固定属性的函数(与数学上的偏函数不一样)

# 通常会返回10进制
int('12345')  # print 12345 

# 使用参数 返回 8进制
int('11111', 8)  # print 4681

每次都得添加参数比较麻烦, functools提供了partial的方法

import functools

foo = functools.partial(int, base=8)

foo('11111')  # print 4681

通过这种方法生成一个固定参数的新函数.

假设要转换大量的二进制字符串,每次都传入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代码调试的几种方法总结
Apr 15 Python
Python设计足球联赛赛程表程序的思路与简单实现示例
Jun 28 Python
python3中int(整型)的使用教程
Mar 23 Python
Python的时间模块datetime详解
Apr 17 Python
详解Python3 中hasattr()、getattr()、setattr()、delattr()函数及示例代码数
Apr 18 Python
好的Python培训机构应该具备哪些条件
May 23 Python
实例讲解Python中浮点型的基本内容
Feb 11 Python
python将pandas datarame保存为txt文件的实例
Feb 12 Python
python读取与处理netcdf数据方式
Feb 14 Python
Spark处理数据排序问题如何避免OOM
May 21 Python
QT5 Designer 打不开的问题及解决方法
Aug 20 Python
Python自动化实战之接口请求的实现
May 30 Python
Python之父谈Python的未来形式
Jul 01 #Python
举例讲解Python的lambda语句声明匿名函数的用法
Jul 01 #Python
Python内置数据结构与操作符的练习题集锦
Jul 01 #Python
Python设置默认编码为utf8的方法
Jul 01 #Python
Python使用email模块对邮件进行编码和解码的实例教程
Jul 01 #Python
详解Python中使用base64模块来处理base64编码的方法
Jul 01 #Python
Python画图学习入门教程
Jul 01 #Python
You might like
PHP+XML 制作简单的留言本 图文教程
2009/11/02 PHP
yii2中添加验证码的实现方法
2016/01/09 PHP
jquery 1.4.2发布!主要是性能与API
2010/02/25 Javascript
json格式化/压缩工具 Chrome插件扩展版
2010/05/25 Javascript
jquery特效 幻灯片效果示例代码
2013/07/16 Javascript
js判断上传文件的类型和大小示例代码
2013/10/18 Javascript
Javascript让DEDECMS告别手写Tag
2014/09/01 Javascript
JavaScript的null和undefined区别示例介绍
2014/09/15 Javascript
jQuery中prop()方法用法实例
2015/01/05 Javascript
浅谈jQuery中replace()方法
2015/05/13 Javascript
jquery实现简洁文件上传表单样式
2015/11/02 Javascript
JavaScript检查子字符串是否在字符串中的方法
2016/02/03 Javascript
Java框架SSH结合Easyui控件实现省市县三级联动示例解析
2016/06/12 Javascript
javascript轮播图算法
2016/10/21 Javascript
JavaScript获取服务器时间的方法详解
2016/12/11 Javascript
AngularJs篇:使用AngularJs打造一个简易权限系统的实现代码
2016/12/26 Javascript
vue-router3.0版本中 router.push 不能刷新页面的问题
2018/05/10 Javascript
node中modules.exports与exports导出的区别
2018/06/08 Javascript
NodeJS读取分析Nginx错误日志的方法
2019/05/14 NodeJs
ES6 Class中实现私有属性的一些方法总结
2019/07/08 Javascript
layer设置maxWidth及maxHeight解决方案
2019/07/26 Javascript
nodejs开发一个最简单的web服务器实例讲解
2020/01/02 NodeJs
Vue向后台传数组数据,springboot接收vue传的数组数据实例
2020/11/12 Javascript
python网络编程之读取网站根目录实例
2014/09/30 Python
Python中的rjust()方法使用详解
2015/05/19 Python
详解JavaScript编程中的window与window.screen对象
2015/10/26 Python
set在python里的含义和用法
2019/06/24 Python
Python tensorflow实现mnist手写数字识别示例【非卷积与卷积实现】
2019/12/19 Python
Python爬取某平台短视频的方法
2021/02/08 Python
世界领先的高品质定制产品平台:Zazzle
2017/07/23 全球购物
英国版MAC彩妆品牌:Illamasqua
2018/04/18 全球购物
几个常见的消息中间件(MOM)
2014/01/08 面试题
电子商务专业个人的自我评价
2013/12/19 职场文书
python爬取网页版QQ空间,生成各类图表
2021/06/02 Python
Go Plugins插件的实现方式
2021/08/07 Golang
java实现面板之间切换功能
2022/06/10 Java/Android