데코레이터 

  • 함수가 실행되면 데코레이터에서 선언 된 코드가 같이 실행된다.
  • 어떤 함수든 위에 @(elapsed)를 붙이면 실행 가능하다는 것이 장점이다.
def says(func):  # 2.cats function을 받음(가지고만 있음)
    def dog():
        func()  # 3.여기서 cats를 실행함
        print("니가 해준게 뭐야")
    return dog

@says  # 1.얘가 실행
def cats():
    print("오늘 밥 안줬잖아!")

cats()



#출력 
#오늘 밥 안줬잖아!
#니가 해준게 뭐야

 

def wrapper_function(func):
    def decorate():
        print('함수 이전에 실행')
        func()
        print('함수 이후에 실행')
    return decorate


def basic():
    print('실행하고자 하는 함수')


new = wrapper_function(basic)
new()


#위와 아래가 같다
@wrapper_function
def basic2():
    print('실행하고자 하는 함수')

 

 

def double_number(func):  # 2.double_number 함수를 가져옴
    def wrapper(a, b):
        double_a = a * 2
        double_b = b * 2
        return func(double_a, double_b)  # 3.double_numer 인자를 받고 리턴
    return wrapper


#얘는 double_number를 찾아가서 최종적으로 a*2 + b*2를 함
@double_number  # 1.데코레이터 실행
def double_number_add(a, b): 
    return a + b


#얘는 그냥 a+b 값을 구함
def add(a, b):
    return a + b
    
    
double_number_add(2, 5)
#출력 : 14

'Python' 카테고리의 다른 글

[Python] syntactic sugar  (0) 2023.03.24
[Python] return과 print  (1) 2023.03.24
[Python] 클로저(Closure)  (0) 2023.03.23
[Python] 클래스 if __name__ =="__main__":  (0) 2023.03.23
[Python] 클래스 self  (0) 2023.03.23

+ Recent posts