阿小信大人的头像
Life is short (You need Python) Bruce Eckel

wraps函数的作用2014-10-16 21:32

from functools import wraps


def makebold(fn):
    @wraps(fn)
    def wrapped():
        return "<b>" + fn() + "</b>"
    return wrapped


def makeitalic(fn):
    @wraps(fn)
    def wrapped():
        return "<i>" + fn() + "</i>"
    return wrapped


@makebold
@makeitalic
def hello():
"""a decorated hello world"""
    return "hello world"

if __name__ == '__main__':
    print('result:{}   name:{}   doc:{}'.format(hello(), hello.__name__, hello.__doc__))

### OUTPUT ###
# result:<b><i>hello world</i></b>   name:hello   doc:a decorated hello world

一个被装饰后的函数其实已经是另外一个函数了,函数名和函数的doc也都发生了改变, 使用wraps装饰器能保留原有函数的名称和docstring,wraps函数封装了functools update_wrapper函数, update_wrapper函数的作用是把被封装函数的__name____module____doc____dict__都复制到封装函数去。 不然无法正确输出hello.__name__hello.__doc__

如果您觉得从我的分享中得到了帮助,并且希望我的博客持续发展下去,请点击支付宝捐赠,谢谢!

若非特别声明,文章均为阿小信的个人笔记,转载请注明出处。文章如有侵权内容,请联系我,我会及时删除。

#Python#  
分享到:
阅读[1292] 评论[0]

你可能也感兴趣的文章推荐

本文最近访客

发表评论