为什么要在装饰器中定义一个新函数作为下面的包装器函数呢?
def not_during_the_night(func):
def wrapper():
if 7 <= datetime.now().hour < 22:
return func
else:
pass # Hush, the neighbours are asleep
return wrapper
不仅仅是做类似的事情?:
def not_during_the_night(func):
if 7 <= datetime.now().hour < 22:
return func
else:
pass # Hush, the neighbours are asleep
最终结果不一样吗?另外,如果我们需要添加一些功能,我们也可以做到这一点,因此我真的不明白为什么这样编写装饰器,但是一定有充分的理由。 :)
编辑:我不小心在第一种情况下放在了括号内,问题应该是这样的
答案 0 :(得分:2)
修饰器的想法是返回一个可以根据需要调用的函数,并根据修饰器的用途增强了功能。
您的建议将无法使用。首先,如果我在夜间实例化该实例,那么即使我在中午调用该函数,您的提案也会返回None
,并且我的调用程序也会崩溃。
通常,您的提案会根据实例化的时间冻结功能,而不是在我的用例调用功能时冻结。
答案 1 :(得分:1)
结果将不同,在第一个使用包装器的示例中,每次调用装饰函数时都会检查时间条件。在第二个示例中,在将装饰器应用于函数时,将仅检查一次时间条件。