파이썬에서 top-level 코드는 해당 모듈의 import 시점에, 단 한 번만 실행된다.
* top-level 코드 : 함수/클래스 밖의 모듈. ( if 분기문, for 반복문, print 등 포함 )
(config.py)
from datetime import datetime
print(f"===import 시점 실행===")
NOW = datetime.now() # top-level 코드
print(f"[config.py] NOW(import): {NOW}")
print(f"===import 시점 실행===")
def get_current_time(): # top-level 코드
global NOW
return NOW
(main.py)
from config import get_current_time
from datetime import datetime
print("[main.py] 실행")
NOW = get_current_time()
print(f"[main.py] NOW(runtime): {datetime.now()}")
print(f"[main.py] NOW(runtime2): {NOW}")
( python main.py 출력결과 )
===import 시점 실행===
[config.py] NOW(import): 2025-05-05 19:36:59.222294
===import 시점 실행===
[main.py] 실행
[main.py] NOW(runtime): 2025-05-05 19:36:59.222854
[main.py] NOW(runtime2): 2025-05-05 19:36:59.222294
config.py파일의 import 시점 => top-level code 실행
- 전역변수 NOW 값 세팅.
- get_current_time() 함수 정의. (실행은 함수 호출 시)
config.py파일의 runtime 시점 => main.py 실행( get_current_time() 함수 호출)
- import 시점에 세팅된 전역변수 NOW 값 print.
*** 주의 ***
top-level 변수는 import 시점 기준으로 고정.
def나 class는 정의만! 실행은 호출 시점에!
os 체크를 top-level 코드 영역에서 if분기 처리했더니 원하는 결과가 나오지 않았는데
import시점에 이미 분기처리 완료된 값으로 고정되어 있어서였다.
파이썬 모듈의 import 시점 / runtime 시점 이해하기 **
'Python > 공부공부' 카테고리의 다른 글
[Python] 패킹(Packing) & 언패킹(Unpacking) (0) | 2025.03.26 |
---|---|
[Python] Deepdiff, PyYAML 라이브러리 (+ YAML이란?) (0) | 2025.02.03 |
[Python] 웹 프레임워크 (Django, Flask, FastAPI, Sanic 등..) (0) | 2024.10.14 |
[Python] pymysql 라이브러리 (MySQL 데이터 베이스 연동) (0) | 2024.10.14 |
[Python] zfill() _ 문자열채우기 (날짜/시간 표현) (0) | 2024.07.26 |