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接收多播数据的代码
Mar 01 Python
Win7下搭建python开发环境图文教程(安装Python、pip、解释器)
May 17 Python
Python正则抓取新闻标题和链接的方法示例
Apr 24 Python
彻底搞懂Python字符编码
Jan 23 Python
从DataFrame中提取出Series或DataFrame对象的方法
Nov 10 Python
梅尔频率倒谱系数(mfcc)及Python实现
Jun 18 Python
Python-Seaborn热图绘制的实现方法
Jul 15 Python
Python MongoDB 插入数据时已存在则不执行,不存在则插入的解决方法
Sep 24 Python
Python3.8对可迭代解包的改进及用法详解
Oct 15 Python
Pandas聚合运算和分组运算的实现示例
Oct 17 Python
Python实现搜索算法的实例代码
Jan 02 Python
jupyter notebook 实现matplotlib图动态刷新
Apr 22 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
mysql 的 like 问题,超强毕杀记!!!
2007/01/18 PHP
php 购物车实例(申精)
2009/05/11 PHP
PHP 各种排序算法实现代码
2009/08/20 PHP
php去除字符串换行符示例分享
2014/02/13 PHP
PHP反射使用实例和PHP反射API的中文说明
2014/07/02 PHP
php+mysqli使用预处理技术进行数据库查询的方法
2015/01/28 PHP
利用PHPExcel实现Excel文件的写入和读取
2017/04/26 PHP
php post换行的方法
2020/02/03 PHP
Prototype Function对象 学习
2009/07/12 Javascript
jQuery插件开发的两种方法及$.fn.extend的详解
2014/01/16 Javascript
jQuery实现简单网页遮罩层/弹出层效果兼容IE6、IE7
2014/06/16 Javascript
javascript中键盘事件用法实例分析
2015/01/30 Javascript
在线引用最新jquery文件的实现方法
2016/08/26 Javascript
理解 Node.js 事件驱动机制的原理
2017/08/16 Javascript
对mac下nodejs 更新到最新版本的最新方法(推荐)
2018/05/17 NodeJs
vue使用原生swiper代码实例
2020/02/05 Javascript
[10:39]DOTA2上海特级锦标赛音乐会纪录片
2016/03/21 DOTA
[01:02:30]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第三场 8.22
2019/09/05 DOTA
python 使用正则表达式按照多个空格分割字符的实例
2018/12/20 Python
Python字典的基本用法实例分析【创建、增加、获取、修改、删除】
2019/03/05 Python
python代码 FTP备份交换机配置脚本实例解析
2019/08/01 Python
python中如何实现将数据分成训练集与测试集的方法
2019/09/13 Python
pygame实现非图片按钮效果
2019/10/29 Python
python使用ctypes调用扩展模块的实例方法
2020/01/28 Python
python代码实现TSNE降维数据可视化教程
2020/02/28 Python
整理HTML5移动端开发的常用触摸事件
2016/04/15 HTML / CSS
生物技术研究生自荐信
2013/11/12 职场文书
建筑工程毕业生自我鉴定
2014/01/14 职场文书
2014年团员学习十八大思想汇报
2014/09/13 职场文书
2015年出纳个人工作总结
2015/04/02 职场文书
趣味运动会赞词
2015/07/22 职场文书
2016小学优秀教师先进事迹材料
2016/02/26 职场文书
Redis Stream类型的使用详解
2021/11/11 Redis
pytorch中的 .view()函数的用法介绍
2022/03/17 Python
Springboot-cli 开发脚手架,权限认证,附demo演示
2022/04/28 Java/Android
css弧边选项卡的项目实践
2023/05/07 HTML / CSS