Python的functools模块

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

首先是partial函数,它可以重新绑定函数的可选参数,生成一个callable的partial对象:
>>> int('10') # 实际上等同于int('10', base=10)和int('10', 10) 10 >>> int('10', 2) # 实际上是int('10', base=2)的缩写 2 >>> from functools import partial
>>> int2 = partial(int, 2) # 这里我没写base,结果就出错了 >>> int2('10')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: an integer is required
>>> int2 = partial(int, base=2) # 把base参数绑定在int2这个函数里 >>> int2('10') # 现在缺省参数base被设为2了 2 >>> int2('10', 3) # 没加base,结果又出错了 Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: keyword parameter 'base' was given by position and by name
>>> int2('10', base=3)3 >>> type(int2)
<type 'functools.partial'>
从中可以看出,唯一要注意的是可选参数必须写出参数名。

接着是update_wrapper函数,它可以把被封装函数的__name__、__module__、__doc__和 __dict__都复制到封装函数去:
#-*- coding: gbk -*- def thisIsliving(fun):   def living(*args, **kw):     return fun(*args, **kw) + '活着就是吃嘛。'   return living@thisIsliving def whatIsLiving():   "什么是活着"   return '对啊,怎样才算活着呢?' print whatIsLiving()print whatIsLiving.__doc__print from functools import update_wrapperdef thisIsliving(fun):   def living(*args, **kw):     return fun(*args, **kw) + '活着就是吃嘛。'   return update_wrapper(living, fun)@thisIsliving def whatIsLiving():   "什么是活着"   return '对啊,怎样才算活着呢?' print whatIsLiving()print whatIsLiving.__doc__
结果:
对啊,怎样才算活着呢?活着就是吃嘛。
None

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

最后是wraps函数,它将update_wrapper也封装了进来:
#-*- coding: gbk -*- from functools import wrapsdef thisIsliving(fun):   @wraps(fun)   def living(*args, **kw):     return fun(*args, **kw) + '活着就是吃嘛。'   return living@thisIsliving def whatIsLiving():   "什么是活着"   return '对啊,怎样才算活着呢?' print whatIsLiving()print whatIsLiving.__doc__
结果还是一样的:
对啊,怎样才算活着呢?活着就是吃嘛。
什么是活着

转载于:https://my.oschina.net/taisha/blog/55985

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值