阿小信大人的头像
Talk is cheap. Show me the code. Linus Torvalds

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#   阅读[2987] 评论[0]

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

本文最近访客

网友185.*.*.13[火星]2022-01-24 17:46
网友77.*.*.109[捷克]2022-01-24 17:45
网友118.*.*.74[火星]2022-01-24 17:41
网友185.*.*.10[火星]2022-01-24 17:28

发表评论