2017-10-15 10 views
-2

私はデコレータをPythonで理解しようとしています。次が動作しない理由を私は理解していない:なぜこのpythonデコレータは動作しませんか?

def decorator(func): 
    def logger(*args, **kwargs): 
     print "start logging" 
     func(*args, **kwargs) 
     print "end logging" 
    return logger 

@decorator 
def add(a,b): 
    return a+b 

を私はadd(2,3)を呼び出す場合、出力は次のようになります。

start logging 
end logging 

しかし、私は私のコードを変更し、loggerの定義にreturn func(*args, **kwargs)を書く場合動作しますが、end loggingは出力に書き込まれません。

+3

'return'を実行すると関数が終了する...関数の呼び出し結果を*、* print、*、*して返す。 – jonrsharpe

+1

'logger'関数は' func'の値を返さなければなりませんが、最後までそれを行うことはできません。今少し、 'func'呼び出しの結果をどうやって保存することができますか?それで後で'返す 'ことができますか? –

答えて

4

あなたは変数に戻り値をキャプチャし、印刷後にそれを返すことができます。

def decorator(func): 
    def logger(*args, **kwargs): 
     print "start logging" 
     result = func(*args, **kwargs) 
     print "end logging" 
     return result 
    return logger 

デコレータは、ここでは特別ではありません。別の関数を呼び出す関数です。

関連する問題