파이썬이 데커레이터를 실행하는 시점

매일 공부(ML)·2022년 12월 14일
0

Fluent Python

목록 보기
42/130

객체로서의 함수

함수 데커레이터와 클로저

파이썬이 데커레이터를 실행하는 시점

데커레이터의 핵심 특징은 데커레이터된 함수가 정의된 직후에 실행된다는 것으로 일반적으로 파이썬이 모듈을 로딩하는 시점,즉 임포트 타임에 실행된다.

registry = []

def register(func):
	print('running register(%s)' % func)
    registry.append(func)
    return func
    
@register
def f1():
	print('running f1()')

@register
def f2():
	print('running f2()')
    
@register
def f3():
	print('running f3()')

def main():
	print('running main()')
    print('registry->', registry)
    f1()
    f2()
    f3()
    
if __name__=='__main__':
	main()

register()는 모듈 내의 다른 어떠한 함수보다 먼저 실행 (두 번)되고, register()가 호출될 때 데커레이터된 함수를 인수로 받는다.


모듈이 로딩된 후 registry는 데커레이터된 두 개의 함수 f1()과 f2()에 대한 참조를 가진다. 이 두 함수는 main()에 의해 명시적으로 호출될 때만 실행된다.

import registration
registration.registry

함수 데커레이터는 모듈이 임포트되자마자 실행되지만, 데커레이트된 함수는 명시적으로 호출될 때만 실행됨을 알 수 있다.

profile
성장을 도울 아카이빙 블로그

0개의 댓글