-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
질문드립니다.
23.01.18 15:36 작성 조회수 174
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)
답변을 작성해보세요.
0
남박사
지식공유자2023.01.26
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 이 호출되는 것은 아니기 때문입니다.
답변 1