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分析nignx访问日志脚本分享
Feb 26 Python
以一段代码为实例快速入门Python2.7
Mar 31 Python
Python将阿拉伯数字转换为罗马数字的方法
Jul 10 Python
Python编程修改MP3文件名称的方法
Apr 19 Python
python自动发邮件库yagmail的示例代码
Feb 23 Python
python实现教务管理系统
Mar 12 Python
python scp 批量同步文件的实现方法
Jan 03 Python
​如何愉快地迁移到 Python 3
Apr 28 Python
Python中使用__new__实现单例模式并解析
Jun 25 Python
Python列表(list)所有元素的同一操作解析
Aug 01 Python
Django自带用户认证系统使用方法解析
Nov 12 Python
python 用opencv实现霍夫线变换
Nov 27 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
利用js调用后台php进行数据处理原码
2006/10/09 PHP
相对路径转化成绝对路径
2007/04/10 PHP
ThinkPHP行为扩展Behavior应用实例详解
2014/07/22 PHP
一波PHP中cURL库的常见用法代码示例
2016/05/06 PHP
PHP实现随机生成水印图片功能
2017/03/22 PHP
Laravel框架实现利用监听器进行sql语句记录功能
2018/06/06 PHP
php中对象引用和复制实例分析
2019/08/14 PHP
javascript 学习笔记(onchange等)
2010/11/14 Javascript
增强用户体验友好性之jquery easyui window 窗口关闭时的提示
2012/06/22 Javascript
JS中FRAME的操作问题实例分析
2014/10/21 Javascript
jQuery实现鼠标划过展示大图的方法
2015/03/09 Javascript
JavaScript获取页面中超链接数量的方法
2015/11/09 Javascript
实例讲解避免javascript冲突的方法
2016/01/03 Javascript
Angular中ng-bind和ng-model的区别实例详解
2017/04/10 Javascript
Angular 2父子组件数据传递之@ViewChild获取子组件详解
2017/07/04 Javascript
Bootstrap弹出框(Popover)被挤压的问题小结
2017/07/11 Javascript
详解wow.js中各种特效对应的类名
2017/09/13 Javascript
JS实现带导航城市列表以及输入搜索功能
2018/01/04 Javascript
深入浅析Vue全局组件与局部组件的区别
2018/06/15 Javascript
vue+element实现打印页面功能
2019/05/20 Javascript
微信小程序实现传递多个参数与事件处理
2019/08/12 Javascript
[04:11]DOTA2上海特级锦标赛主赛事首日TOP10
2016/03/03 DOTA
Python实现的基数排序算法原理与用法实例分析
2017/11/23 Python
python实现批量图片格式转换
2020/06/16 Python
Python实现将Excel转换成为image的方法
2018/10/23 Python
python将一组数分成每3个一组的实例
2018/11/14 Python
Python递归函数 二分查找算法实现解析
2019/08/12 Python
python实现ftp文件传输系统(案例分析)
2020/03/20 Python
python openCV自制绘画板
2020/10/27 Python
《雾凇》教学反思
2014/02/17 职场文书
2014年九一八事变演讲稿
2014/09/14 职场文书
党员个人剖析材料
2014/09/30 职场文书
个人批评与自我批评总结
2014/10/17 职场文书
小学生作文评语集锦
2014/12/25 职场文书
nginx前后端同域名配置的方法实现
2021/03/31 Servers
HTML5 语义化标签(移动端必备)
2021/08/23 HTML / CSS