inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

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

323

유대겸

작성한 질문수 2

1

남박사님 안녕하세요~. 수업 재밌게 듣고 있습니다.

아래 코드의 클로져에 대한 내용은 이해했습니다.

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

def test1():
    for i in range(5):
        time.sleep(0.1)

f = time_checker(test1)
f()

1. f= time_checker(test1)

time_checker 실행하여 f에 inner_function 리턴 후, result에 test1()의 값(None) 담음

2.f()

inner_function 실행하여 print() 및 test1()의 값 리턴


문제는 데코레이터 부분인데, 로직에 대한 제 생각이 맞는지 질문드립니다.

@time_checker # test1 = time_checker(test1)
def test1():
    for i in range(5):
        time.sleep(0.1)

test1()

1.@time_checker [ #test1 = time_checker(test1) ]

test1 = time_checker(test1) -->time_checker 실행하여 test1에 inner_function 리턴 후, result에 test1()의 값(None) 담음

2.test1()

test1()이 곧 inner_function()이므로 print() 및 test1()의 값 리턴

3.헷갈리는 점

이제 test1()이 inner_function이 되었고, test1() 정의 아래의 func도 test1()이니 충돌이 나지 않나요?

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

P.S 저의 경우 time_checker의 동작 시간이 0.54초로 오차가 너무 큽니다. 컴퓨터 사양의 문제일까요,,?

closer 웹-크롤링 decorator python

답변 2

1

남박사

이제 test1()이 inner_function이 되었고, test1() 정의 아래의 func도 test1()이니 충돌이 나지 않나요?

test1이 timer_checker의 func 인자로 넘어갔고 test1 함수가 확장이 된 개념이기 때문에 test1()이 inner_function이 된 게 아닙니다. 그러므로 확장된 함수의 인자로 func에 test1가 담기게 되고 func()를 호출함으로써 확장된 함수의 test1 함수가 호출되는 역할을 하게 됩니다.

물론 이 모든 행위는 test1()을 호출하는 순간 동작하며 호출 되기 전까지는 메모리에 정의만 된 상태로 유지되게 됩니다. 이렇게 함수를 메모리에 확장하여 보관해놓는게 클로저의 핵심적인 내용이라 보시면 됩니다.

 

0

유대겸

감사합니다ㅎㅎ

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

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

1

781

1

질문드립니다.

1

299

1

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

1

445

1

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

1

421

1

파이썬 크롤링 관련 문의

1

277

1

정규 표현식 질문있습니다.

1

243

1