python wraps_python functools 中的wraps和 partial

1.wraps

functools.wraps(wrapped[, assigned][, updated])

当定义一个wrapper函数时,这是一个非常方便的函数,用来调用 update_wrapper() 作为一个函数装饰器。它相当于 partial(update_wrapper, wrapped=wrapped, assigned=assigned, updated=updated)。举例:

from functools import wraps, partial

def my_decorator(f):

@wraps(f)

def wrapper(*args, **kwds):

print 'Calling decorated function'

return f(*args, **kwds)

return wrapper

@my_decorator

def example():

"""Docstring"""

print 'Called example function'

if __name__ == '__main__':

# process result:

# Calling decorated function

# Called example function

example()

# add wraps decorator reuslt is :example Docstring __main__

# print example.__name__, example.__doc__, example.__module__

# not add wraps decorator reuslt is :wrapper None __main__

print example.__name__, example.__doc__, example.__module__

2.partial

functools.partial(func[,*args][, **keywords])

返回一个新的 partial 类当他被调用时,就像 func(args,*keywords)被调用了.如果提供了更多的参数,都将追加在args中,如果额外的关键字参数被提供,将加入到keywords中。大致如下:

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

partial() 被用在partial函数应用中,被冻结了部分函数参数,导致一个新的签名对象,比如 partial() 可以被用在创建一个可调用的行为像 int() 函数,其中base参数默认是2:

basetwo = partial(int, base=2)

basetwo.__doc__ = 'Convert base 2 string to an int.'

print basetwo('10010')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值