[英]Argument passing in decorated function
一個什么都不做的簡單裝飾器可以像下面這樣完成:
def decorator(func):
return func # don't need to call!
@decorator
def print_word(word='python'):
print (word)
這將運行良好:
>>> print_word()
python
但是,如果我將其包裝在內部 function 中,則稱為如下:
def decorator(func):
def _func(*args, **kwargs):
print ("Args: %s | Kwargs: %s" % (args, kwargs))
return func(*args, **kwargs) # <== Here I need to "call" it with ()
return _func
@decorator
def print_word(word='python'):
print (word)
>>> print_word('ok')
Args: ('ok',) | Kwargs: {}
ok
為什么這兩種方法不同? 如何調用_func
將其“綁定”到_func(*args, **kwargs)
?
def decorator(func):
因為它是一個裝飾器,我們期望它返回一些可以調用的東西。
return func # don't need to call!
對,因為func
是我們將返回的“可以調用的東西”。 裝飾器沒有效果。
然后如果我把它包裹在一個內部 function 中,它被稱為喜歡
我們對_func
的是創建一個新的 function 將由裝飾器返回,並根據傳入的func
定義其行為。 所以我們在調用裝飾器的時候不調用func
; 但是我們確實在_func
的主體內調用它,因為這就是我們在執行_func
時使func
執行的方式。
為什么這兩種方法不同?
我不明白這個問題。 他們有什么相同之處? 他們都在定義一個裝飾器,好吧。 他們以完全不同的方式做到這一點。
如何調用
_func
“綁定它”
我不明白您在這里綁定的意思,並且_func
在此代碼中不會直接按名稱調用。 它在調用print_word
時被調用,因為裝飾器已將print_word
替換為本地創建的_func
。 (每次使用裝飾器時,都會生成一個單獨的 function,具有相同的_func
名稱。這就是你的絆腳石嗎?)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.