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动态监控日志内容的示例
Feb 16 Python
python实现图片批量剪切示例
Mar 25 Python
一个基于flask的web应用诞生 bootstrap框架美化(3)
Apr 11 Python
Python和Java进行DES加密和解密的实例
Jan 09 Python
详解python3中zipfile模块用法
Jun 18 Python
Python使用pyodbc访问数据库操作方法详解
Jul 05 Python
Python实现的json文件读取及中文乱码显示问题解决方法
Aug 06 Python
使用Python编写Prometheus监控的方法
Oct 15 Python
python实现通过队列完成进程间的多任务功能示例
Oct 28 Python
Python如何爬取51cto数据并存入MySQL
Aug 25 Python
Python基于Socket实现简易多人聊天室的示例代码
Nov 29 Python
详解matplotlib绘图样式(style)初探
Feb 03 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代码实现页面伪静态的方法
2015/07/25 PHP
PHP 的比较运算与逻辑运算详解
2016/05/12 PHP
php 使用fopen函数创建、打开文件详解及实例代码
2016/09/24 PHP
Yii2.0中使用js异步删除示例
2017/03/10 PHP
Javascript 表单之间的数据传递代码
2008/12/04 Javascript
用showModalDialog弹出页面后,提交表单总是弹出一个新窗口
2009/07/18 Javascript
可以将word转成html的js代码
2010/04/11 Javascript
fckeditor粘贴Word时弹出窗口取消的方法
2014/10/30 Javascript
JSONP跨域GET请求解决Ajax跨域访问问题
2014/12/31 Javascript
在Javascript中处理数组之toSource()方法的使用
2015/06/09 Javascript
jQuery插件DataTable使用方法详解(.Net平台)
2016/12/22 Javascript
Bootstrap的Carousel配合dropload.js实现移动端滑动切换图片
2017/03/10 Javascript
详解如何在NodeJS项目中优雅的使用ES6
2017/04/22 NodeJs
vue-router的HTML5 History 模式设置
2018/09/08 Javascript
Vue面试题及Vue知识点整理
2018/10/07 Javascript
angular学习之动态创建表单的方法
2018/12/07 Javascript
深入了解JS之作用域和闭包
2020/06/16 Javascript
JavaScript如何使用插值实现图像渐变
2020/06/28 Javascript
python实现获取序列中最小的几个元素
2014/09/25 Python
Python3读取zip文件信息的方法
2015/05/22 Python
Python简单删除目录下文件以及文件夹的方法
2015/05/27 Python
python制作小说爬虫实录
2017/08/14 Python
利用Python查看目录中的文件示例详解
2017/08/28 Python
Python if语句知识点用法总结
2018/06/10 Python
pytorch绘制并显示loss曲线和acc曲线,LeNet5识别图像准确率
2020/01/02 Python
pytorch中使用cuda扩展的实现示例
2020/02/12 Python
CSS3中border-radius属性设定圆角的使用技巧
2016/05/10 HTML / CSS
Scotch Porter官方网站:男士美容产品
2020/08/31 全球购物
Ooni英国官网:披萨烤箱
2020/05/31 全球购物
出国留学自荐信
2013/10/25 职场文书
仓库管理专业个人自我评价范文
2013/11/11 职场文书
工艺员岗位职责
2014/02/11 职场文书
硕士生工作推荐信
2014/03/07 职场文书
理想国读书笔记
2015/06/25 职场文书
团拜会主持词
2015/07/04 职场文书
python设置 matplotlib 正确显示中文的四种方式
2021/05/10 Python