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 布尔操作实现代码
Mar 23 Python
Python实现字典的key和values的交换
Aug 04 Python
python将list转为matrix的方法
Dec 12 Python
python url 参数修改方法
Dec 26 Python
如何使用Python实现斐波那契数列
Jul 02 Python
Python 合并多个TXT文件并统计词频的实现
Aug 23 Python
详解在Python中以绝对路径或者相对路径导入文件的方法
Aug 30 Python
python实现生成Word、docx文件的方法分析
Aug 30 Python
Django2 连接MySQL及model测试实例分析
Dec 10 Python
Java爬虫技术框架之Heritrix框架详解
Jul 22 Python
Python3利用scapy局域网实现自动多线程arp扫描功能
Jan 21 Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
Feb 22 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
星际玩家的三大定律
2020/03/04 星际争霸
《雄兵连》系列首部大电影《烈阳天道》:可能是因为期望值太高了
2020/08/18 国漫
解析Extjs与php数据交互(增删查改)
2013/06/25 PHP
php获取文件大小的方法
2014/02/26 PHP
php采用curl实现伪造IP来源的方法
2014/11/21 PHP
7个鲜为人知却非常实用的PHP函数
2015/07/01 PHP
PHP常用操作类之通信数据封装类的实现
2017/07/16 PHP
表单切换,用回车键替换Tab健(不支持IE)
2011/07/20 Javascript
javascript之Partial Application学习
2013/01/10 Javascript
Web跨浏览器进程通信(Web跨域)
2013/04/17 Javascript
js将当前时间格式转换成时间搓(自写)
2013/09/26 Javascript
jQuery中hide()方法用法实例
2014/12/24 Javascript
jQuery中toggleClass()方法用法实例
2015/01/05 Javascript
JavaScript实现的类字典插入或更新方法实例
2015/07/10 Javascript
通过jquery实现页面的动画效果(实例代码)
2016/09/18 Javascript
使用原生JS实现滚轮翻页效果的示例代码
2020/05/31 Javascript
Vue Render函数创建DOM节点代码实例
2020/07/08 Javascript
[02:36]DOTA2混沌骑士 英雄基础教程
2013/11/26 DOTA
在Mac OS上使用mod_wsgi连接Python与Apache服务器
2015/12/24 Python
python和ruby,我选谁?
2017/09/13 Python
Python中三元表达式的几种写法介绍
2019/03/04 Python
Flask框架重定向,错误显示,Responses响应及Sessions会话操作示例
2019/08/01 Python
Python return语句如何实现结果返回调用
2020/10/15 Python
HTML5 canvas 基本语法
2009/08/26 HTML / CSS
iframe在移动端的缩放的示例代码
2018/10/12 HTML / CSS
BrandAlley英国:法国折扣奢侈品网上零售商
2017/07/03 全球购物
人力资源主管职责范本
2014/03/05 职场文书
基层党组织公开承诺书
2014/03/28 职场文书
生日寄语大全
2014/04/08 职场文书
社区平安建设方案
2014/05/25 职场文书
幼儿园户外活动总结
2014/07/04 职场文书
住宿生擅自离校检讨书
2014/09/22 职场文书
2014年团委工作总结
2014/11/13 职场文书
幼儿园小班开学寄语
2015/05/27 职场文书
大学生军训心得体会5篇
2019/08/15 职场文书
为什么MySQL分页用limit会越来越慢
2021/07/25 MySQL