2017-12-03 6 views

答えて

3

デコレータが適用される前に、デコレータされた関数がネームスペース内の何にも割り当てられないということです。デコレータを使って関数を書くと、書く関数は引数としてデコレータに渡され、デコレータが返すオブジェクトは関数として扱われます。ここでは簡単な例です:

def dec(func): 
    print('times_two' in globals()) 
    def _inner(*args, **kwargs): 
    print("Decorated") 
    return func(*args, **kwargs) 
    return _inner 

@dec 
def times_two(x): 
    return x*2 

print('times_two' in globals()) 

あなたはこのランニングhereを見ることができます。デコレータが機能を「装飾」する前に、名前「times_two」がバインドされていないため、のdecFalseと表示されます。

+0

"関数定義は、1つ以上のデコレータ式でラップすることができます。デコレータ式は、関数定義時に評価され、関数定義を含むスコープ内で評価されます。戻り値は、関数オブジェクトの代わりに関数名にバインドされます。複数のデコレータはネストされた形で適用されます。たとえば、次のコード "これら2つのステートメントは同じですか? –

+0

@ HongliBuどの2つのステートメント? –

+0

私の質問とコメントの文 –

関連する問題