簡體   English   中英

包裝器方法的意義是什么?

[英]What is the significance of the wrapper method?

def decorator(func):
   def wrapper(func):
     do something before
     func()
     do something later

   return wrapper

func = decorator(func)---->這是我的decoarated函數func()做裝飾的東西並給我輸出。

為什么不簡單地裝飾它?

def decorator(func):

    do something before
    func()
    do something later

decorator(func)

我能看到的唯一優勢是,在一種情況下,我獲得了用於分配和重用的func對象。 我想這個問題有點模糊,但我想我們為什么需要返回一個函數對象,如果我們的目的只是裝飾? 我的意思是什么呢?

如果要在多個位置使用修飾函數, 必須返回要重用的函數對象。

在第二個例子中,調用decorator(func)調用func 這意味着如果你想要裝飾器行為(即“之前的東西”和“之后的東西”),你每次都必須調用decorator(func)

裝飾器的要點是你有效地執行func = decorator(func)然后,永遠之后,當你調用func它會自動調用裝飾器行為。

考慮裝飾器語法的含義。 這個:

@decorator
def say_hi():
    print "Hello!"

這是語法糖:

def say_hi():
    print "Hello!"
say_hi = decorator(say_hi)

因此,裝飾器基本上接受一個函數,並返回一個新的修改函數。 換句話說,在裝飾之前, say_hi是一個功能; 之后,它仍然是一個功能......雖然是一個修改過的功能。

如果裝飾器是這樣寫的:

def decorator(fn):
  return "Something else"

然后,在裝飾之前, say_hi將是一個函數,但之后,它將具有值“Something else”(字符串) - 而現在它不再可調用!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM