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实现在Linux系统下更改当前进程运行用户
Feb 04 Python
python实现简单socket程序在两台电脑之间传输消息的方法
Mar 13 Python
Python判断文本中消息重复次数的方法
Apr 27 Python
解决python文件字符串转列表时遇到空行的问题
Jul 09 Python
理论讲解python多进程并发编程
Feb 09 Python
Python requests发送post请求的一些疑点
May 20 Python
Python for循环中的陷阱详解
Jul 13 Python
python中单例常用的几种实现方法总结
Oct 13 Python
python函数map()和partial()的知识点总结
May 26 Python
使用Numpy对特征中的异常值进行替换及条件替换方式
Jun 08 Python
python 写一个文件分发小程序
Dec 05 Python
Python Pygame实战之塔防游戏的实现
Mar 17 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
escape unescape的php下的实现方法
2007/04/27 PHP
php arsort 数组降序排序详细介绍
2016/11/17 PHP
PHP实现多图上传(结合uploadify插件)思路分析
2016/11/30 PHP
Yii2使用$this->context获取当前的Module、Controller(控制器)、Action等
2017/03/29 PHP
tp5.1 框架join方法用法实例分析
2020/05/26 PHP
php gethostbyname获取域名ip地址函数详解
2010/01/24 Javascript
jquery内置验证(validate)使用方法示例(表单验证)
2013/12/04 Javascript
一个获取第n个元素节点的js函数
2014/09/02 Javascript
Nodejs实现批量下载妹纸图
2015/05/28 NodeJs
全面解析bootstrap格子布局
2016/05/22 Javascript
jQuery获取table行数并输出单元格内容的实现方法
2016/06/30 Javascript
easyui tree带checkbox实现单选的简单实例
2016/11/07 Javascript
Angular的事件和表单详解
2016/12/26 Javascript
JS排序之冒泡排序详解
2017/04/08 Javascript
label+input实现按钮开关切换效果的实例
2017/08/16 Javascript
深入理解Vue Computed计算属性原理
2018/05/29 Javascript
详解VUE调用本地json的使用方法
2019/05/15 Javascript
element ui分页多选,翻页记忆的实例
2019/09/03 Javascript
electron-vue开发环境内存泄漏问题汇总
2019/10/10 Javascript
JS+HTML5本地存储Localstorage实现注册登录及验证功能示例
2020/02/10 Javascript
extjs图表绘制之条形图实现方法分析
2020/03/06 Javascript
javascript实现贪吃蛇游戏(娱乐版)
2020/08/17 Javascript
[01:06:54]DOTA2-DPC中国联赛 正赛 SAG vs DLG BO3 第二场 2月28日
2021/03/11 DOTA
python实现决策树
2017/12/21 Python
Python3+Appium安装使用教程
2019/07/05 Python
Python通过文本和图片生成词云图
2020/05/21 Python
python使用selenium爬虫知乎的方法示例
2020/10/28 Python
印度在线内衣和时尚目的地:Zivame
2017/09/28 全球购物
学生处主任岗位职责
2013/12/01 职场文书
社区七一党员活动方案
2014/01/25 职场文书
家居装修公司创业计划书范文
2014/03/20 职场文书
英文自荐信常用句子
2014/03/26 职场文书
检讨书1000字
2014/10/11 职场文书
《称赞》教学反思
2016/02/17 职场文书
浅谈移动端中的视口(viewport)的具体使用
2021/04/13 HTML / CSS
Nginx+Windows搭建域名访问环境的操作方法
2022/03/17 Servers