如何制作函数装饰器并将它们链接在一起?

发布于 2022-02-17 09:44:57

如何在 Python 中制作两个可以执行以下操作的装饰器?

@makebold
@makeitalic
def say():
   return "Hello"

…应该返回:

"<b><i>Hello</i></b>"

我不是想HTML在实际应用程序中采用这种方式——只是想了解装饰器和装饰器链接是如何工作的。

关注者
0
被浏览
59
1 个回答
  • 面试哥
    面试哥 2022-02-17
    为面试而生,有面试问题,就找面试哥。

    查看文档以了解装饰器是如何工作的。这是您的要求:

    from functools import wraps
    
    def makebold(fn):
        @wraps(fn)
        def wrapper(*args, **kwargs):
            return "<b>" + fn(*args, **kwargs) + "</b>"
        return wrapper
    
    def makeitalic(fn):
        @wraps(fn)
        def wrapper(*args, **kwargs):
            return "<i>" + fn(*args, **kwargs) + "</i>"
        return wrapper
    
    @makebold
    @makeitalic
    def hello():
        return "hello world"
    
    @makebold
    @makeitalic
    def log(s):
        return s
    
    print hello()        # returns "<b><i>hello world</i></b>"
    print hello.__name__ # with functools.wraps() this returns "hello"
    print log('hello')   # returns "<b><i>hello</i></b>"
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看