我试图理解装饰者的行为。 我知道装饰者必须返回一个对象,所以我可以理解下面的语法:
def my_deco(fonction):
print("Deco is called with parameter the function {0}".format(fonction))
return fonction
@my_deco
def hello():
print("hello !")
Deco is called with parameter the function <function salut at 0x00BA5198>
这里装饰器做的不多,但是在我需要修改功能的情况下,我定义了这样的装饰器
def my_deco(fonction):
def modified_func():
print("Warning ! calling {0}".format(fonction))
return fonction()
return modified_func
@my_deco
def hello():
print("Salut !")
通过modified_func修改初始函数行为。这很好
它包括对初始函数的调用。这很好
现在我不明白的是:为什么我们会返回函数的结果?在我的情况下,功能是一个简单的打印&#39;所以我不知道为什么要归还
感谢您的解释
答案 0 :(得分:0)
正如评论中所述:通常在您编写装饰器时,您可以将其设置为可以与任何可能的功能一起使用。而这样做的方法是返回原始函数返回的任何内容,或者转换返回值(也可以在包装函数中完成)。
在Python中,实际上做的所有函数都会返回一些东西。没有显式return语句的函数返回值None
。因此,如果你的wrpper函数,在装饰器内,总是返回任何返回的装饰函数,它将是安全的:即使装饰函数没有显式返回,它将返回刚刚转发的None
通过你的包装。
现在,这不是“强制性的”。如果您事先知道您的装饰器将仅应用于没有返回值的函数,那么您也可以不在包装函数中放置return语句 - 这不是一个不正确的语法(但它可能是您未来的陷阱)自)。