[英]Understanding a specific decorator, Why is there a function inside a function?
[英]Why define a function inside a decorator?
為什么在裝飾器中定義一個新函數作為下面的包裝函數是一種做法:
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
最后的結果不一樣嗎? 另外,如果我們需要添加一些功能,我們也可以這樣做,所以我真的不明白為什么裝飾器是這樣寫的,但必須有一個很好的理由。 :)
編輯:我不小心在第一個案例中留下了括號,問題應該是這樣的
裝飾器的想法是返回一個您可以根據需要調用的函數,並根據裝飾器的目的增強功能。
您建議的將在使用中失敗。 首先,如果我在晚上實例化這個,你的提議將返回None
,我的調用程序會崩潰,即使我在中午調用該函數。
更一般地說,您的提議根據實例化時間凍結功能,而不是我的用例調用函數的時間。
它不會是相同的結果,在第一個帶有包裝器的示例中,每次調用裝飾函數時都會檢查時間條件。 在第二個示例中,在您將裝飾器應用於函數時,將只檢查一次時間條件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.