inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

질문입니다

195

Guy유

작성한 질문수 10

1

데코레이터의 로직이 함수의 어떤부분에 들어가는지 궁금합니다  

웹-크롤링 python

답변 1

1

남박사

파이썬 데코레이터는 단순히 데코레이터의 로직이 함수 어느 부분에 위치해서 실행되는 단순한 동작방식은 아닙니다. 사람이 이해하기에 그렇게 쉽게 이해할  수 있게 설계되어있을뿐 실제 동작하는 방식은 그보다 훨씬 복잡합니다.

def func_outer(msg):
    def func_inner():
        return "데코레이터 메세지 : {}".format(msg)
    return func_inner


= func_outer("test")
print(dir(t))

위와 같이 데코레이터 함수를 정의하고 이를 t 라는 변수에 할당하여 dir(t) 를 출력해보면

위외 이미지에서 처럼 t 의 내부 함수들을 확인해 볼 수 있습니다. 여기서 __closure__ 라는 애가 실제 중요한 역할을 하는데 이 클로저가 어떻게 동작하는지 그리고 클로저와 데코레이터는 무슨 차이가 있는지 공부를 해보시면 좀 더 도움이 되지 않을까 생각됩니다.

print(dir(t.__closure__[0]) 을 출력해서 __closure__ 의 구성을 살펴보면 위 이미지 처럼 클로저가 어떻게 구성이 되어있는지 확인할 수 있고 cell_contents 라는 변수에 우리가 할당한 함수명이 임시 보관되어있는 것도 확인해볼 수 있습니다. 이를 보아 데코레이터에 정의한 함수가 수행되고 이렇게 인자로 넘어온 함수명을 cell_contents 에 보관하였다가 실행되어야 하는 순간에 이를 호출하고 리턴하는 방식으로 동작할거라 대강 유추가 가능합니다.

물론 더 정확하게 알기 위해선 실제 소스코드를 보고 분석해보는 방법이 가장 좋습니다.

38강 = 연산자 더하고 빼기

0

59

2

주석처리

0

116

1

함수의 파라미터값 msg

0

154

1

강의자료 이미지 안나옴

0

238

3

강의자료 질문 두번째

0

164

3

강의자료 관련 질문

0

115

1

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

0

234

1

소수 너무 어려워요

0

244

1

imagefont 함수 사용

0

238

1

pylint

0

356

1

add 함수 문의 ㅠㅠ

0

281

1

형식 문의드립니다.

0

208

1

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

0

601

1

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

0

250

1

zsh: command not found: pylint

0

268

1

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

0

545

1

질문드립니다.

1

373

2

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

1

432

1

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

1

322

2

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

1

780

1

질문드립니다.

1

298

1

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

1

444

1

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

1

420

1

파이썬 크롤링 관련 문의

1

276

1