簡體   English   中英

傳入裝飾的參數 function

[英]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.

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