inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

남박사의 파이썬 기초부터 실전 100% 활용

데코레이터로 함수동작 시간 측정 해보기

궁금합니다.

해결된 질문

172

김민찬

작성한 질문수 11

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()

이런식으로 짠다면 어떤문제가 있을수 있나요?

python 웹-크롤링

답변 1

6

남박사

예제로 주신 내용에서는 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에 문제없이 들어갑니다. 이해가 되셨길 바랍니다. ^^

38강 = 연산자 더하고 빼기

0

60

2

주석처리

0

116

1

함수의 파라미터값 msg

0

155

1

강의자료 이미지 안나옴

0

239

3

강의자료 질문 두번째

0

165

3

강의자료 관련 질문

0

116

1

파이썬 예외 처리 try / except 파일 처리 코드가 실행이 안됩니다.

0

235

1

소수 너무 어려워요

0

245

1

imagefont 함수 사용

0

239

1

pylint

0

357

1

add 함수 문의 ㅠㅠ

0

283

1

형식 문의드립니다.

0

209

1

변수 명을 왜 src, tar로 하셨는지 궁금합니다.

0

602

1

숫자야구 코드를 짜 봤는데 뭔가 이상합니다.

0

253

1

zsh: command not found: pylint

0

269

1

텔레그램 봇 만들기 코드 실행이 안됩니다 박사님..ㅠ

0

546

1

질문드립니다.

1

374

2

list.reverse() 출력에 대해서 질문있습니다.

1

433

1

데코레이터 함수 및 동작시간 질문입니다.~

1

323

2

opencv 사용하면서 궁금한점 (해상도)

1

781

1

질문드립니다.

1

299

1

아래 오류가 뜨면서 vscode가 컴파일이 되지 않는데.. 혹시 왜이럴까요?

1

445

1

크롤링안되는 현상 문의 드립니다.

1

421

1

파이썬 크롤링 관련 문의

1

277

1