이번 편의 목표: import와 main 진입점으로 재사용 가능한 파일을 만듭니다.
함수가 늘어나면 파일 하나에 모든 코드를 모아 두기 불편해집니다. 모듈은 파이썬 코드를 담은 파일을 다른 파일에서 가져와 쓰는 방법입니다. 표준 라이브러리는 파이썬에 함께 제공되는 도구 모음입니다. 우선 외부 패키지 설치 없이 시작하겠습니다.
남이 만든 기능을 가져온다
import math
from collections import Counter
print(math.ceil(23 / 5))
categories = ["식비", "교통", "식비", "문구"]
counts = Counter(categories)
print(counts["식비"])
print(counts.most_common(1))`import math`를 사용하면 `math.ceil()`처럼 모듈 이름을 붙여 호출합니다. `from collections import Counter`는 필요한 이름을 직접 가져옵니다. `ceil()`은 위쪽 정수로 올림하므로 첫 결과는 `5`입니다. `Counter`는 값별 등장 횟수를 세며, 식비는 2번 등장합니다.
모든 기능을 `from module import *`로 가져오면 어떤 이름이 어디에서 왔는지 알기 어려워집니다. 필요한 모듈이나 이름을 분명히 지정하는 것이 좋습니다.
내가 만든 파일도 모듈이다
함께 제공한 `examples/module_demo` 폴더의 `money.py`는 금액을 표시하는 함수만 정의합니다. `main.py`는 그 함수를 가져와 사용합니다. 두 파일을 같은 폴더에 두고 그 폴더에서 `python main.py`를 실행하면 됩니다.
`money.py` 내용:
# 파일: money.py
def format_won(amount):
return f"{amount:,}원"`main.py` 내용:
# 파일: main.py
from money import format_won
def main():
print(format_won(12500))
if __name__ == "__main__":
main()출력은 `12,500원`입니다. `__name__`은 파일을 직접 실행했을 때 `"__main__"`입니다. 다른 모듈에서 가져왔을 때는 모듈 이름이 됩니다. 따라서 마지막 조건을 두면 다른 곳에서 가져올 때 `main()`까지 자동 실행되는 것을 막을 수 있습니다.
가져오기에도 실행이 포함된다
모듈을 처음 가져올 때 최상위 문장들은 실행됩니다. 함수 정의는 이름을 준비하지만, 파일 맨 아래에 곧바로 적은 `input()`이나 파일 저장 문장은 가져오는 순간 실행될 수 있습니다. 재사용할 함수와 직접 실행할 일을 분리해야 하는 이유입니다.
파일 이름도 조심해야 합니다. 내 파일을 `csv.py`, `json.py`, `random.py`라고 지으면 같은 이름의 표준 라이브러리를 가릴 수 있습니다. `expense_csv.py`처럼 목적을 붙인 이름이 좋습니다. import 오류가 나면 설치부터 시도하기 전에 현재 폴더와 파일 이름부터 확인하세요.
직접 해 보기
아래처럼 원 단위 금액에 수량을 곱하는 함수를 만들고, 같은 파일의 `main()`에서 호출하세요. 이후 다른 파일에서 가져오더라도 출력이 자동 발생하지 않게 구성하세요.
해설
def total_price(price, quantity):
return price * quantity
def main():
print(total_price(3000, 4))
if __name__ == "__main__":
main()직접 실행하면 `12000`이 출력됩니다. 파일을 나누는 목적은 파일 수를 늘리는 것이 아니라 계산·저장·실행의 역할을 읽기 쉽게 만드는 것입니다.
COMMENTS
댓글 0
이 글에 대한 의견이나 질문을 남겨 주세요.
등록된 댓글이 없습니다.