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之wxPython应用实例
Sep 28 Python
Python实现去除代码前行号的方法
Mar 10 Python
进一步了解Python中的XML 工具
Apr 13 Python
儿童编程python入门
May 08 Python
python实现淘宝秒杀脚本
Jun 23 Python
python使用phoenixdb操作hbase的方法示例
Feb 28 Python
python算法题 链表反转详解
Jul 02 Python
检测python爬虫时是否代理ip伪装成功的方法
Jul 12 Python
Flask框架学习笔记之消息提示与异常处理操作详解
Aug 15 Python
numpy.array 操作使用简单总结
Nov 08 Python
Python 多线程共享变量的实现示例
Apr 17 Python
Python Django获取URL中的数据详解
Nov 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
global.php
2006/12/09 PHP
IIS+PHP+MySQL+Zend配置 (视频教程)
2006/12/13 PHP
PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
2011/12/05 PHP
php输出金字塔的2种实现方法
2014/12/16 PHP
php利用imagemagick实现复古老照片效果实例
2017/02/16 PHP
php基于Redis消息队列实现的消息推送的方法
2018/11/28 PHP
PDO::errorInfo讲解
2019/01/28 PHP
Javascript 验证上传图片大小[客户端]
2009/08/01 Javascript
关于Ext中form移除textfield方法:hide(),setVisible(false),remove()
2010/12/02 Javascript
原始XMLHttpRequest方法详情回顾
2013/11/28 Javascript
js获得当前时区夏令时发生和终止的时间代码
2014/02/23 Javascript
JS实现超精简响应鼠标显示二级菜单代码
2015/09/12 Javascript
JavaScript代码判断点击第几个按钮
2015/12/13 Javascript
Validform+layer实现漂亮的表单验证特效
2016/01/17 Javascript
探究Javascript模板引擎mustache.js使用方法
2016/01/26 Javascript
简述Matlab中size()函数的用法
2016/03/20 Javascript
基于jQuery实现的幻灯图片切换
2016/12/02 Javascript
Ajax 加载数据 练习代码
2017/01/05 Javascript
Extjs gridpanel 中的checkbox(复选框)根据某行的条件不能选中的解决方法
2017/02/17 Javascript
全面解析Node.js 8 重要功能和修复
2017/06/02 Javascript
angularjs下ng-repeat点击元素改变样式的实现方法
2018/09/12 Javascript
elementUI select组件value值注意事项详解
2019/05/29 Javascript
解决Vue中使用keepAlive不缓存问题
2020/08/04 Javascript
Vue管理系统前端之组件拆分封装详解
2020/08/23 Javascript
python中的reduce内建函数使用方法指南
2014/08/31 Python
Python装饰器decorator用法实例
2014/11/10 Python
Python基础教程之内置函数locals()和globals()用法分析
2018/03/16 Python
Python反转序列的方法实例分析
2018/03/21 Python
pytorch点乘与叉乘示例讲解
2019/12/27 Python
一款纯css3实现的非常实用的鼠标悬停特效演示
2014/11/05 HTML / CSS
意大利独特而优质的家居用品:Fazzini
2018/12/05 全球购物
Python面试题:如何用Python来发送邮件
2016/03/15 面试题
后勤主管岗位职责
2014/03/01 职场文书
党员群众路线剖析材料
2014/10/08 职场文书
python机器学习实现oneR算法(以鸢尾data为例)
2022/03/03 Python
Python开发简易五子棋小游戏
2022/05/02 Python