我们可以使用装饰器设计任何函数吗?

在我的采访中,他们问我一个工具,该工具可以反转句子中的每个单词并从中创建最终句子.例如:

s = 'my life is beautiful'
output - `ym efil si lufituaeb` 

我知道问题很简单,请在几分钟后解决:

s = 'my life is beautiful'

def reverse_sentence(s):

    string_reverse = []

    for i in s.split():
        string_reverse.append("".join(list((reversed(i)))))

    print " ".join(string_reverse)

reverse_sentence(s)

然后他们要求使用装饰器实现相同的功能,我对此感到困惑.我知道装饰器的基本用法,以及使用方法.他们没有提到要使用装饰器包装功能的哪一部分.他们告诉我使用args和kwargs来实现这一点,但我无法解决.有人可以在这里帮我吗?如何将任何函数转换为装饰器?

据我所知,当您要包装功能或要修改某些功能时,可以使用装饰器.我的理解正确吗?

解决方法:

def reverse_sentence(fn): # a decorator accepts a function as its argument
    def __inner(s,*args,**kwargs): #it will return this modified function
       string_reverse = []
       for i in s.split():
           string_reverse.append("".join(list((reversed(i)))))          
       return fn(" ".join(string_reverse),*args,**kwargs) 
    return __inner # return the modified function which does your string reverse on its first argument

我猜…

@reverse_sentence
def printer(s):
    print(s)

printer("hello world")
上一篇:我如何在Django中编写装饰器以检查两个单独的条件并进行相应的重定向?


下一篇:理解装饰器:未指定参数时返回类型是一个函数