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的Template使用指南
Sep 11 Python
Python中使用摄像头实现简单的延时摄影技术
Mar 27 Python
python 并发编程 阻塞IO模型原理解析
Aug 20 Python
pytorch常见的Tensor类型详解
Jan 15 Python
Python随机数函数代码实例解析
Feb 09 Python
Python实现子类调用父类的初始化实例
Mar 12 Python
Django Admin设置应用程序及模型顺序方法详解
Apr 01 Python
Python读取多列数据以及用matplotlib制作图表方法实例
Sep 23 Python
pytorch 实现变分自动编码器的操作
May 24 Python
pytorch fine-tune 预训练的模型操作
Jun 03 Python
OpenCV 图像梯度的实现方法
Jul 25 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检测文件编码的方法示例
2014/04/25 PHP
php实现QQ空间获取当前用户的用户名并生成图片
2015/07/25 PHP
thinkphp分页集成实例
2017/07/24 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
2017/11/14 PHP
PHP长连接实现与使用方法详解
2018/02/11 PHP
用JavaScript实现仿Windows关机效果
2007/03/10 Javascript
深入理解javascript中return的作用
2013/12/30 Javascript
node.js中使用q.js实现api的promise化
2014/09/17 Javascript
js网页右下角提示框实例
2014/10/14 Javascript
JS弹出对话框实现方法(三种方式)
2015/12/18 Javascript
Angularjs中UI Router的使用方法
2016/05/14 Javascript
BootStrapValidator校验方式
2016/12/19 Javascript
js canvas实现画图、滤镜效果
2018/11/27 Javascript
如何在Angular8.0下使用ngx-translate进行国际化配置
2019/07/24 Javascript
JavaScript原型继承和原型链原理详解
2020/02/04 Javascript
Javascript执行流程细节原理解析
2020/05/14 Javascript
vue实现简单图片上传
2020/06/30 Javascript
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
python实现批量修改文件名代码
2017/09/10 Python
numpy的文件存储.npy .npz 文件详解
2018/07/09 Python
python中如何使用分步式进程计算详解
2019/03/22 Python
Python基于pyecharts实现关联图绘制
2020/03/27 Python
TensorFlow的环境配置与安装教程详解(win10+GeForce GTX1060+CUDA 9.0+cuDNN7.3+tensorflow-gpu 1.12.0+python3.5.5)
2020/06/22 Python
详解如何在PyCharm控制台中输出彩色文字和背景
2020/08/17 Python
CSS的background属性及CSS3的背景图片设置总结
2016/06/13 HTML / CSS
html5 canvas里绘制椭圆并保持线条粗细均匀的技巧
2013/03/25 HTML / CSS
用canvas实现图片滤镜效果附演示
2013/11/05 HTML / CSS
TUMI香港官网:国际领先的行李箱、背囊品牌
2021/03/01 全球购物
关于打架的检讨书
2014/01/17 职场文书
家长学校实施方案
2014/03/15 职场文书
奶茶店创业计划书
2014/08/14 职场文书
渠道运营商合作协议书范本
2014/10/06 职场文书
2014年个人工作总结报告
2014/11/27 职场文书
2015年小学教师培训工作总结
2015/07/21 职场文书
《狼牙山五壮士》教学反思
2016/02/17 职场文书
mysql 体系结构和存储引擎介绍
2022/05/06 MySQL