文档章节

Python的functools模块

charlesdong1989
 charlesdong1989
发布于 2014/10/11 16:28
字数 480
阅读 251
收藏 11

这个模块提供了3个有趣的函数,这里介绍下其用法。

首先是partial函数,它可以重新绑定函数的可选参数,生成一个callable的partial对象

  1. >>> int('10'# 实际上等同于int('10', base=10)和int('10', 10)  
  2. 10  
  3. >>> int('10'2# 实际上是int('10', base=2)的缩写  
  4. 2  
  5. >>> from functools import partial  
  6. >>> int2 = partial(int, 2# 这里我没写base,结果就出错了  
  7. >>> int2('10')  
  8. Traceback (most recent call last):  
  9.   File "<stdin>", line 1in <module>  
  10. TypeError: an integer is required  
  11. >>> int2 = partial(int, base=2# 把base参数绑定在int2这个函数里  
  12. >>> int2('10'# 现在缺省参数base被设为2了  
  13. 2  
  14. >>> int2('10'3# 没加base,结果又出错了  
  15. Traceback (most recent call last):  
  16.   File "<stdin>", line 1in <module>  
  17. TypeError: keyword parameter 'base' was given by position and by name  
  18. >>> int2('10', base=3)  
  19. 3  
  20. >>> type(int2)  
  21. <type 'functools.partial'>  

从中可以看出,唯一要注意的是可选参数必须写出参数名。

接着是update_wrapper函数,它可以把被封装函数的__name__、__module__、__doc__和 __dict__都复制到封装函数去:

  1. #-*- coding: gbk -*-  
  2.   
  3. def thisIsliving(fun):  
  4.   def living(*args, **kw):  
  5.     return fun(*args, **kw) + '活着就是吃嘛。'  
  6.   return living  
  7.  
  8. @thisIsliving  
  9. def whatIsLiving():  
  10.   "什么是活着"  
  11.   return '对啊,怎样才算活着呢?'  
  12.   
  13. print whatIsLiving()  
  14. print whatIsLiving.__doc__  
  15.   
  16. print  
  17.   
  18. from functools import update_wrapper  
  19. def thisIsliving(fun):  
  20.   def living(*args, **kw):  
  21.     return fun(*args, **kw) + '活着就是吃嘛。'  
  22.   return update_wrapper(living, fun)  
  23.  
  24. @thisIsliving  
  25. def whatIsLiving():  
  26.   "什么是活着"  
  27.   return '对啊,怎样才算活着呢?'  
  28.   
  29. print whatIsLiving()  
  30. print whatIsLiving.__doc__  

结果:
对啊,怎样才算活着呢?活着就是吃嘛。
None

对啊,怎样才算活着呢?活着就是吃嘛。
什么是活着
不过也没多大用处,毕竟只是少写了4行赋值语句而已。

最后是wraps函数,它将update_wrapper也封装了进来:

[python]  view plain copy
  1. #-*- coding: gbk -*-  
  2.   
  3. from functools import wraps  
  4.   
  5. def thisIsliving(fun):  
  6.   @wraps(fun)  
  7.   def living(*args, **kw):  
  8.     return fun(*args, **kw) + '活着就是吃嘛。'  
  9.   return living  
  10.  
  11. @thisIsliving  
  12. def whatIsLiving():  
  13.   "什么是活着"  
  14.   return '对啊,怎样才算活着呢?'  
  15.   
  16. print whatIsLiving()  
  17. print whatIsLiving.__doc__  

本文转载自:http://blog.csdn.net/wangqiaoshi/article/details/12556831

charlesdong1989
粉丝 22
博文 155
码字总数 84903
作品 0
海淀
私信 提问
每周一个 Python 模块 | functools

functools 是 Python 中很简单但也很重要的模块,主要是一些 Python 高阶函数相关的函数。 该模块的内容并不多,看 官方文档 也就知道了。 说到高阶函数,这是函数式编程范式中很重要的一个概...

yongxinz
2018/11/12
0
0
map,filter,reduce的应用方法

最近在自学python,不知道怎么入手,就花了好几十大洋买了《python学习手册》来看,记忆力不好,怕以后忘记了,写下来当是笔记吧。也可以供那些python新手又没买这本书的人做参考哈~ 1.map把第...

Geomen
2012/02/27
424
0
每周一个 Python 模块 | operator

系列文章列表 每周一个 Python 模块 | functools 每周一个 Python 模块 | itertools operator 模块是 Python 中内置的操作符函数接口,它定义了算术,比较和与标准对象 API 相对应的其他操作...

yongxinz
2018/11/16
0
0
python 函数式编程之装饰器

python学习笔记,特做记录,分享给大家,希望对大家有所帮助。 装饰器 由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数。 运行结果: 函数对象有一个nam...

展菲
06/29
0
0
python利用装饰器进行运算

今天想用python的装饰器做一个运算,代码如下 >>> def mu(x):def _mu(args,**kwargs):return xxreturn _mu @mudef test(x,y):print '%s,%s' %(x,y) test(3,5) Traceback (most recent call l......

jastme
2015/07/24
125
0

没有更多内容

加载失败,请刷新页面

加载更多

详解tomcat的连接数与线程池

前言 在使用tomcat时,经常会遇到连接数、线程数之类的配置问题,要真正理解这些概念,必须先了解Tomcat的连接器(Connector)。 在前面的文章 详解Tomcat配置文件server.xml 中写到过:Con...

xiaomin0322
26分钟前
3
0
分布式锁的由来、特点、及Redis分布式锁的实现详解

什么是分布式锁 要介绍分布式锁,首先要提到与分布式锁相对应的是线程锁、进程锁。 1.线程锁 主要用来给方法、代码块加锁。当某个方法或代码使用锁,在同一时刻仅有一个线程执行该方法或该代...

一只会编程的狼
30分钟前
5
0
docker+tomcat+负载均衡

1、首先安装docker docker安装 2、docker安装tomcat docker安装tomcat(支持多个) 3、docker按照nginx docker按照nginx 可能在最后你放我项目地址后,会发现nginx样式丢失先现象,不用慌,按...

你好夜故事
34分钟前
4
0
【巨杉数据库SequoiaDB】巨杉⼯具系列之一 | ⼤对象存储⼯具sdblobtool

近期,巨杉数据库正式推出了完整的SequoiaDB 工具包,作为辅助工具,更好地帮助大家使用和运维管理分布式数据库。为此,巨杉技术社区还将持续推出工具系列文章,帮助大家了解巨杉数据库丰富的...

巨杉数据库
34分钟前
3
0
软件开发相关规范

1,语义化版本 2.0.0

四季变幻
42分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部