2017-12-16 19 views
1

난 그냥 파이썬 장식에 익숙해 노력하고 있어요,하지만 난이 아래 얻을 왜 언어 초보자로서 나는 이해할 수 없다 :어떻게 인수가 그들에게 전달 될 때 장식 작업 할

내 코드와 장식을위한 인수 :

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

두 가지 기능을 꾸미기 때문에 데코레이터가 두 번 실행됩니다. 데코레이터는 데코 레이팅 된 각 함수가 정의 될 때 실행됩니다. 파이썬은 프로그램을 파싱하고 내부적으로 바이트 컴파일합니다.

장식자가 인수를 허용하는지 여부는 중요하지 않습니다. 이것은 데코레이터가 사용되는 것입니다. 즉, 정의 된대로 다른 함수에서 함수를 실행합니다.