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 相关文章推荐
解决windows下Sublime Text 2 运行 PyQt 不显示的方法分享
Jun 18 Python
Python AES加密实例解析
Jan 18 Python
Python搭建FTP服务器的方法示例
Jan 19 Python
Tensorflow实现卷积神经网络用于人脸关键点识别
Mar 05 Python
Python中对数组集进行按行打乱shuffle的方法
Nov 08 Python
python频繁写入文件时提速的方法
Jun 26 Python
Django项目之Elasticsearch搜索引擎的实例
Aug 21 Python
应用OpenCV和Python进行SIFT算法的实现详解
Aug 21 Python
Python3的unicode编码转换成中文的问题及解决方案
Dec 10 Python
python实现串口通信的示例代码
Feb 10 Python
python实现scrapy爬虫每天定时抓取数据的示例代码
Jan 27 Python
Python 多线程处理任务实例
Nov 07 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和ACCESS写聊天室(七)
2006/10/09 PHP
PHP 字符串编码截取函数(兼容utf-8和gb2312)
2009/05/02 PHP
Yii快速入门经典教程
2015/12/28 PHP
php中数组最简单的使用方法
2020/12/27 PHP
用Jquery实现可编辑表格并用AJAX提交到服务器修改数据
2009/12/27 Javascript
ExtJS4 组件化编程,动态加载,面向对象,Direct
2011/05/12 Javascript
JavaScript之Getters和Setters 平台支持等详细介绍
2012/12/07 Javascript
JavaScript?Apple设备检测示例代码
2013/11/15 Javascript
Jquery操作Ajax方法小结
2015/11/29 Javascript
BootStrap Table后台分页时前台删除最后一页所有数据refresh刷新后无数据问题
2016/12/28 Javascript
Vue.js实现表格动态增加删除的方法(附源码下载)
2017/01/20 Javascript
基于jQuery实现的单行公告活动轮播效果
2017/08/23 jQuery
Vue组件开发之LeanCloud带图形校验码的短信发送功能
2017/11/07 Javascript
Angular5给组件本身的标签添加样式class的方法
2018/04/07 Javascript
快速解决bootstrap下拉菜单无法隐藏的问题
2018/08/10 Javascript
深入探讨JavaScript的最基本部分之执行上下文
2019/02/12 Javascript
Jquery的autocomplete插件用法及参数讲解
2019/03/12 jQuery
微信小程序视图控件与bindtap之间的问题的解决
2019/04/08 Javascript
微信小程序常用赋值方法小结
2019/04/30 Javascript
python中执行shell命令的几个方法小结
2014/09/18 Python
Python列出一个文件夹及其子目录的所有文件
2016/06/30 Python
解决Shell执行python文件,传参空格引起的问题
2018/10/30 Python
浅谈pycharm导入pandas包遇到的问题及解决
2020/06/01 Python
Python爬虫获取页面所有URL链接过程详解
2020/06/04 Python
Python如何读取、写入CSV数据
2020/07/28 Python
香港钟表珠宝首饰商城:OneMallTime网摩间
2016/10/14 全球购物
电子商务自荐书范文
2014/01/04 职场文书
党校学习思想汇报
2014/01/06 职场文书
小组口号大全
2014/06/09 职场文书
奥林匹克运动会口号
2014/06/19 职场文书
工作检讨书500字
2014/10/19 职场文书
关于成立领导小组的通知
2015/04/23 职场文书
考试没考好检讨书
2015/05/06 职场文书
庆七一晚会主持词
2015/06/30 职场文书
MySQL为数据表建立索引的原则详解
2022/03/03 MySQL
Python中的嵌套循环详情
2022/03/23 Python