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和MD5实现网站挂马检测程序
Mar 13 Python
Python struct模块解析
Jun 12 Python
Python去除列表中重复元素的方法
Mar 20 Python
Python中用于返回绝对值的abs()方法
May 14 Python
20招让你的Python飞起来!
Sep 27 Python
pycharm中使用anaconda部署python环境的方法步骤
Dec 19 Python
python实现按首字母分类查找功能
Oct 31 Python
Tensorflow 卷积的梯度反向传播过程
Feb 10 Python
python脚本实现mp4中的音频提取并保存在原目录
Feb 27 Python
pytorch Dropout过拟合的操作
May 27 Python
python 算法题——快乐数的多种解法
May 27 Python
Python合并pdf文件的工具
Jul 01 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
php5.2.0内存管理改进
2007/01/22 PHP
PHP执行linux系统命令的常用函数使用说明
2010/04/27 PHP
在PHP中实现Javascript的escape()函数代码
2010/08/08 PHP
PHP错误处理函数
2016/04/03 PHP
php简单解析mysqli查询结果的方法(2种方法)
2016/06/29 PHP
JAVASCRIPT车架号识别/验证函数代码 汽车车架号验证程序
2012/01/08 Javascript
深入理解JavaScript系列(16) 闭包(Closures)
2012/04/12 Javascript
EasyUI 中 MenuButton 的使用方法
2012/07/14 Javascript
浅谈关于JavaScript的语言特性分析
2013/04/11 Javascript
JavaScript基本语法讲解
2015/06/03 Javascript
nodeJs链接Mysql做增删改查的简单操作
2017/02/04 NodeJs
Async Validator 异步验证使用说明
2017/07/03 Javascript
JS HTML图片显示Canvas 压缩功能
2017/07/21 Javascript
vue项目中使用vue-i18n报错的解决方法
2019/01/13 Javascript
JavaScript数组排序功能简单实现
2020/05/14 Javascript
Vue中 axios delete请求参数操作
2020/08/25 Javascript
javascript使用canvas实现饼状图效果
2020/09/08 Javascript
简单文件操作python 修改文件指定行的方法
2013/05/15 Python
python使用Berkeley DB数据库实例
2014/09/26 Python
连接Python程序与MySQL的教程
2015/04/29 Python
Python基于PycURL实现POST的方法
2015/07/25 Python
教你使用python实现微信每天给女朋友说晚安
2018/03/23 Python
python调用c++ ctype list传数组或者返回数组的方法
2019/02/13 Python
Django Sitemap 站点地图的实现方法
2019/04/29 Python
Django中使用MySQL5.5的教程
2019/12/18 Python
Django admin组件的使用
2020/10/24 Python
澳大利亚家具和家居用品购物网站:Zanui
2018/12/29 全球购物
旅游网创业计划书
2014/01/31 职场文书
吸烟检讨书2000字
2014/02/13 职场文书
《蓝色的树叶》教学反思
2014/02/24 职场文书
安全生产网格化管理实施方案
2014/03/01 职场文书
不尊敬老师检讨书范文
2014/11/19 职场文书
2015选调生工作总结
2015/07/24 职场文书
公司人力资源管理制度
2015/08/05 职场文书
Django路由层如何获取正确的url
2021/07/15 Python
windows server2016安装oracle 11g的图文教程
2022/07/15 Servers