Python Functools

functools.wraps()

wraps(wrapped[,assigned][,updated])
常用装饰器函数中返回的wrapper()函数,解决了被装饰函数namedoc等签名丢失问题。

1
2
3
4
5
6
>>> import functools
>>> def decorator(f):
@functools.wrap(f)
def wrapper(*args, **kwargs):
return f(*args, **kwargs)
return wrapper

functools.partial()

partial(func[,*args][,**kwargs])
是一个装饰器函数,也是一个闭包,返回一个可调用对象,freeze一些参数。

实现原理

1
2
3
4
5
6
7
8
9
def partial(func, *args, **keywords):
def newfunc(*fargs, **fkeywords):
newkeywords = keywords.copy()
newkeywords.update(fkeywords)
return func(*(args + fargs), **newkeywords)
newfunc.func = func
newfunc.args = args
newfunc.keywords = keywords
return newfunc

References