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')
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 functools函数 functools模块用于高阶函数:作用与或者返回其它函数的函数。一般来说,对于该模块...
    lakerszhy阅读 13,351评论 0 7
  • functools模块用于高级函数:作用于或返回其他函数的函数,一般来说,任何可调用对象都可以作为这个模块的用途来...
    第八共同体阅读 8,162评论 0 2
  • This is a convenience function for invoking partial(updat...
    williamhyw阅读 4,292评论 0 1
  • 今天第一次搭讪失败了。 “阿姨,这是你女儿吗?” “嗯。” “她们多大呀?” “一个10岁,一个2岁。” “国庆带...
    桂桂小公举阅读 1,222评论 1 1
  • 十九大胜利召开!干部职工共庆祝! 金秋逢盛会!豪情著华章! 班组团结喜迎十九大! 不忘初心,牢记使命! 女子班组共...
    大辉辉啊阅读 4,427评论 0 0