2017-12-16 6 views
1

私はPythonでデコレータに精通取得しようとしていますが、私はこの下に取得する理由の言語に初心者として、私は理解することはできません。がどのように引数が彼らに渡されたときにデコレーターが動作しません

私のコードを持つデコレータため引数:

def decorator_with_argument(fun_name): 
    def decorator_func(func): 
     '''decorator function which will provide additional functionality to my original function''' 
     print("Inside decorator") 
     def wrapper_func(*args,**kwargs): 
      print("Inside wrapper") 
      print("Calling function {} with parameters {} {}".format(fun_name, *args, **kwargs)) 
      return func(*args,**kwargs) 
     return wrapper_func 
    return decorator_func 

@decorator_with_argument("Addition") 
def addition_func(a,b): 
    print(a+b) 

@decorator_with_argument("Subtraction") 
def subtraction_func(a,b): 
    print(a-b) 

addition_func(10,15) 
subtraction_func(25,10) 

出力:私は二回 "インサイドデコレータ" を取得する理由

Inside decorator 
Inside decorator 
Inside wrapper 
Calling function Addition with parameters 10 15 
25 
Inside wrapper 
Calling function Subtraction with parameters 25 10 
15 

誰かが私に説明できますか?

答えて

0

デコレータは、2つの機能を装飾しているため、2回実行されます。デコレータは、装飾された各関数が定義されているときに実行されます。Pythonはプログラムを解析し、内部的にバイトコンパイルするためです。

デコレータが引数を受け入れるかどうかは重要ではありません。これは、デコレータが使用されているものです。定義されている別の関数で関数を実行します。

関連する問題