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实现复制整个目录的方法
May 12 Python
python链接Oracle数据库的方法
Jun 28 Python
Python3实现购物车功能
Apr 18 Python
对python产生随机的二维数组实例详解
Dec 13 Python
Python 判断图像是否读取成功的方法
Jan 26 Python
Python多线程同步---文件读写控制方法
Feb 12 Python
Pycharm创建项目时如何自动添加头部信息
Nov 14 Python
Python原始套接字编程实例解析
Jan 29 Python
keras绘制acc和loss曲线图实例
Jun 15 Python
python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解
Jan 26 Python
解决numpy和torch数据类型转化的问题
May 23 Python
Python实现滑雪小游戏
Sep 25 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颜色转换函数hex-rgb(将十六进制格式转成十进制格式)
2013/09/23 PHP
php开启openssl的方法
2014/05/15 PHP
PHP配置把错误日志以邮件方式发送方法(Windows系统)
2015/06/23 PHP
PHP使用mysqli操作MySQL数据库的简单方法
2017/02/04 PHP
PHP如何通过date() 函数格式化显示时间
2020/11/13 PHP
js渐变显示渐变消失示例代码
2013/08/01 Javascript
js怎么覆盖原有方法实现重写
2014/09/04 Javascript
再分享70+免费的jquery 图片滑块效果插件和教程
2014/12/15 Javascript
jquery结婚电子请柬特效源码分享
2015/08/21 Javascript
基于nodejs+express(4.x+)实现文件上传功能
2015/11/23 NodeJs
关于javascript原型的修改与重写(覆盖)差别详解
2016/08/31 Javascript
jQuery实现ToolTip元素定位显示功能示例
2016/11/23 Javascript
BootStrap框架个人总结(bootstrap框架、导航条、下拉菜单、轮播广告carousel、栅格系统布局、标签页tabs、模态框、菜单定位)
2016/12/01 Javascript
jQuery弹出窗口打开链接的实现代码
2016/12/24 Javascript
前端编码规范(3)JavaScript 开发规范
2017/01/21 Javascript
微信小程序 action-sheet 反馈上拉菜单简单实例
2017/05/11 Javascript
nodejs微信开发之自动回复的实现
2019/03/17 NodeJs
Vue CLI项目 axios模块前后端交互的使用(类似ajax提交)
2019/09/01 Javascript
Python中集合的内建函数和内建方法学习教程
2015/08/19 Python
python3实现抓取网页资源的 N 种方法
2017/05/02 Python
Python遍历某目录下的所有文件夹与文件路径
2018/03/15 Python
对TensorFlow的assign赋值用法详解
2018/07/30 Python
解决Python中定时任务线程无法自动退出的问题
2019/02/18 Python
利用Python+阿里云实现DDNS动态域名解析的方法
2019/04/01 Python
python实现微信打飞机游戏
2020/03/24 Python
HTML5如何实现元素拖拽
2016/03/11 HTML / CSS
使用iframe+postMessage实现页面跨域通信的示例代码
2020/01/14 HTML / CSS
小学新学期教师寄语
2014/01/18 职场文书
社区党员先进事迹
2014/01/22 职场文书
公司员工检讨书
2014/02/08 职场文书
党支部班子“四风”问题自我剖析材料
2014/09/28 职场文书
2016党风廉政建设心得体会范文
2016/01/25 职场文书
幼儿园大班教师评语
2019/06/21 职场文书
java调用Restful接口的三种方法
2021/08/23 Java/Android
在MySQL中你成功的避开了所有索引
2022/04/20 MySQL
MySQL数据库之内置函数和自定义函数 function
2022/06/16 MySQL