2017-04-12 3 views
11
def makebold(fn): 
    def wrapped(): 
     return "<b>" + fn() + "</b>" 
    return wrapped 

def makeitalic(fn): 
    def wrapped(): 
     return "<i>" + fn() + "</i>" 
    return wrapped 

@makeitalic 
@makebold 
def hello(): 
    return "hello world" 

print(hello()) ## returns "<b><i>hello world</i></b>" 

このコードでは、関数makeitalic()とmakebold()を定義し、関数helloを渡すのはなぜですか?Pythonデコレータと関数の受け渡し対

ここで何かが見つからないか、もっと複雑なもののデコレータが本当に良いですか?

答えて

8

このコードでは、関数makeitalic()とmakebold()を定義し、関数helloを渡すのはなぜですか?

あなたは確かに可能です!デコレータは文法的な砂糖です。ボンネットの下に、何が起こるかは次のとおりです。

@makeitalic 
@makebold 
def hello(): 
    return "hello world" 

は次のようになります。

def hello(): 
    return "hello world" 

hello = makebold(hello) 
hello = makeitalic(hello) 
+0

おかげで、この場合には不要と思われます。私は彼らが他のユースケースでは簡潔であると確信しています。 –

関連する問題