질문입니다
195
작성한 질문수 10
데코레이터의 로직이 함수의 어떤부분에 들어가는지 궁금합니다
답변 1
1
파이썬 데코레이터는 단순히 데코레이터의 로직이 함수 어느 부분에 위치해서 실행되는 단순한 동작방식은 아닙니다. 사람이 이해하기에 그렇게 쉽게 이해할 수 있게 설계되어있을뿐 실제 동작하는 방식은 그보다 훨씬 복잡합니다.
위와 같이 데코레이터 함수를 정의하고 이를 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





