파이썬 코드를 작성하다 보면, 함수에 전달하지 않았는데도 모듈에 정의된 상수나 설정 값이 함수 안에서 자연스럽게 사용되는 경우를 자주 보게 됩니다.
처음 보면 “이게 왜 되지?”라는 생각이 들 수 있지만, 이는 파이썬의 스코프 규칙을 이해하면 아주 자연스러운 동작입니다.
핵심은 이 한 문장입니다.
같은 모듈에 정의된 변수는 해당 모듈 안의 모든 함수에서 읽을 수 있다는 점입니다.
파이썬은 함수 내부에서 변수를 찾을 때, 먼저 함수 안을 보고 없으면 그 함수를 감싸고 있는 모듈 공간을 확인합니다.
그래서 아래와 같은 코드가 문제없이 동작합니다.
# config.py
CSV_PATH = "/data/raw.csv"
# ingest.py
from config import CSV_PATH
def run():
print(CSV_PATH) # 파라미터로 안 받아도 사용 가능
이를 비유하자면,
함수는 같은 사무실(모듈) 에 놓인 공용 물품(전역 변수)을 꺼내 쓰는 것과 같습니다.
굳이 택배(파라미터)로 다시 받을 필요가 없는 것이죠.
다만 중요한 제한이 하나 있습니다.
이 방식은 읽기 전용으로 사용하는 것이 안전합니다.
함수 안에서 전역 변수를 수정하려 하면, 의도치 않게 새로운 지역 변수가 생기거나 혼란을 초래할 수 있습니다.
그래서 보통 이런 기준으로 나누는 것이 좋습니다.
- 변하지 않는 설정 값 → 모듈 전역 상수
- 실행 시마다 달라질 수 있는 값 → 함수 파라미터 또는 DAG params
이렇게 역할을 나누면 코드의 의도가 훨씬 또렷해집니다.
모듈에 정의된 변수는 같은 모듈의 함수에서 파라미터 없이 읽을 수 있으며, 고정된 설정 값일 때 전역 상수로 사용하는 것이 가장 깔끔하다.
'파이썬 > 기초 프로그래밍' 카테고리의 다른 글
| 같은 SQLAlchemy인데 왜 다르게 보일까? to_sql()과 engine.execute()의 역할 차이 (0) | 2026.02.03 |
|---|---|
| SQLAlchemy INSERT 구문에서 values 딕셔너리는 어떻게 매핑될까 (0) | 2026.02.03 |
| 데이터 엔지니어링에서 Enum을 활용한 ETL 파이프라인 설계 (0) | 2025.11.28 |
| 파이썬 Descriptor를 활용한 속성 제어 예제 (0) | 2025.09.15 |
| 파이썬 Descriptor와 Property 비교 예제 (0) | 2025.09.15 |