-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
해결됨
궁금합니다.
20.05.22 17:38 작성 조회수 97
3
inner_function을 정의할때 (*args,**kwargs)를 사용하는
이유가 있나요?
그리고 굳이 func를 리턴해주는 이유가 무엇인가요?
import time
def time_checker(func):
def inner_function():
start_time = time.time()
result = func()
end_time = time.time()
print("함수 {} 동작시간 :{}".format(func.__name__,end_time - start_time))
return inner_function
@time_checker
def test1():
for i in range(5):
time.sleep(0.1)
test1()
이런식으로 짠다면 어떤문제가 있을수 있나요?
답변을 작성해보세요.
6
남박사
지식공유자2020.05.22
예제로 주신 내용에서는 inner_function 이 (*args, **kwargs) 인자를 받지 않아도 문제가 되지 않고 func 를 리턴해주지 않아도 전혀 상관이 없습니다. 이유는 test1() 함수가 인자를 받지 않았고 test1() 함수가 리턴하는 값이 없기 때문입니다. 그러나!!!!
import time
def time_checker(func):
def inner_function():
start_time = time.time()
result = func()
end_time = time.time()
print("함수 {} 동작시간 :{}".format(func.__name__,end_time - start_time))
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)
예를 들어 위의 코드같은 상황이라면 오류가 발생하고 당연한 얘기지만 c 에 값이 들어가질 않습니다.
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)
그래서 위처럼 작성해야 어떻게 생긴 함수던 데코레이터를 적용할 수 있게 되고 해당 함수의 결과가 정상적으로 리턴됩니다. *args 로 a, b 값을 받을 수 있게 되며 result 를 리턴했기 때문에 c = test(5, 10) 의 리턴값이 c에 문제없이 들어갑니다. 이해가 되셨길 바랍니다. ^^
답변 1