[003]---python标准库 - functools 内常用函数 - partial - update_wrapper - wraps .md

[TOC]

functools

functools.MappingProxyType
functools.RLock
functools.WRAPPER_ASSIGNMENTS
functools.WRAPPER_UPDATES
functools.WeakKeyDictionary
functools.cmp_to_key
functools.get_cache_token
functools.lru_cache
functools.namedtuple
functools.partial
functools.partialmethod
functools.reduce
functools.singledispatch
functools.total_ordering
functools.update_wrapper

functools.wraps *

1.partial

提前绑定函数的可选参数,后期使用的时候也可以对这些参数进行重新设置, 可理解为默认参数;

# 从中可以看出,唯一要注意的是可选参数必须写出参数名
In [2]: import functools
In [3]: int2 = functools.partial(int, base=2)
In [4]: int2('10')
Out[4]: 2

2.update_wrapper

它可以把被封装函数的__name__、module、__doc__和 __dict__都复制到封装函数去

from functools import update_wrapper

def thisIsliving(fun):
    def living(*args, **kw):
        return fun(*args, **kw) + '活着就是吃嘛。'
    return update_wrapper(living, fun)
 
@thisIsliving
def whatIsLiving():
    "什么是活着"
    return '对啊,怎样才算活着呢?'
  
print whatIsLiving()
print whatIsLiving.__doc__

对啊,怎样才算活着呢?活着就是吃嘛。
什么是活着

3.wraps

将update_wrapper进行了一次封装

def thisIsliving(fun):
    @wraps(fun)
    def living(*args, **kw):
        return fun(*args, **kw) + '活着就是吃嘛。'
    return living

@thisIsliving
def whatIsLiving():
    "什么是活着"
    return '对啊,怎样才算活着呢?'

print whatIsLiving()
print whatIsLiving.__doc__

对啊,怎样才算活着呢?活着就是吃嘛。
什么是活着

你可能感兴趣的:([003]---python标准库 - functools 内常用函数 - partial - update_wrapper - wraps .md)