• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

질문드립니다.

23.01.18 15:36 작성 조회수 168

1

제가 이해한 동작이 맞나 궁금합니다.

아래와 같은 데코레이션 코드에서,

1. time_checker(func) 함수로 test1(a,b) 함수가 전달

2. inner_function(*args, **kwargs) 함수가 실행됨(여기서 *args, **kwargs 로는 test1()함수의 매개변수(a,b)가 전달이 된다.

3. result 에는 test1(a,b) 함수의 반환값이 저장됨 (a+b)

4. 함수 동작시간을 print함

5. return result (inner_function 함수의 반환값이 result임

6. return inner_function (이 부분이 이해가 잘 안갑니다)

(inner_function 함수를 반환? -> 이 문장으로 인해 함수 동작시간이 print되고 result값이 c에 저장되는 것인가?)

<질문>

1. return inner_function 이 문장이 하는 역할이 정확히 무엇인가요?

2. 데코레이터 함수에 inner_function이 꼭 필요한 것인가? 정확한 역할이 뭔 지 모르겠습니다.

inner_function 함수가 데코레이터 함수로 전달되는 함수의 매개변수를 전달받기 위해 필요하다고 생각하였는데, test1 함수에 매개변수가 없이 전달을 해주어도 None이 출력되네요.

import time

def time_checker(func):
    def inner_function(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        end_time = time.time()
        print("함수 {} 동작시간 :{}".format(func.__name__,end_time - start_time))
        return result
    return inner_function

@time_checker
def test1(a, b):
    for i in range(5):
        time.sleep(0.1)
    return a+b

c = test1(5, 10)
print(c)

답변 1

답변을 작성해보세요.

0

1. return inner_function 이 문장이 하는 역할이 정확히 무엇인가요?

inner_function 함수 자체를 반환한다는 이야기 입니다. 여기서 중요한 점은 inner_function 함수를 반환할때 위에서 이해하신 내용이 모두 맞습니다만 func() 가 호출된 시점이 아니란 사실입니다. 쉽게 중요한 점만 이야기 하자면 return inner_function을 통해 inner_function 함수 자체를 반환하고 코드 어딘가에서 inner_function() 함수를 호출해야만 위에서 이해하신 func()를 수행하고 화면에 시간을 출력하고 등의 동작이 이뤄지게 되는 부분입니다.

2. 데코레이터 함수에 inner_function이 꼭 필요한 것인가? 정확한 역할이 뭔 지 모르겠습니다.

inner_function이 없다면 데코레이터가 성립될 수 없습니다. 단지 time_checker함수를 호출했다 해서 데코레디팅된 test1 이 호출되는 것은 아니기 때문입니다.