# 모듈 모듈은 파이썬 코드를 논리적으로 분리하고 재사용하기 위한 기본 단위입니다. 하나의 파이썬 파일(.py)이 하나의 모듈에 해당하며, 함수, 변수, 클래스 등을 정의하여 다른 파이썬 파일에서 불러와 사용할 수 있습니다. * 코드 재사용: 한 번 작성한 코드를 여러 곳에서 반복적으로 사용할 수 있습니다. * 코드 관리: 복잡한 프로그램을 작은 단위로 나누어 관리하기 쉽습니다. * 명명 공간 관리: 다른 모듈과의 변수 이름 충돌을 방지할 수 있습니다. * 코드 공유: 다른 사람들과 코드를 공유하거나 오픈 소스 프로젝트에 참여할 수 있습니다. ### 모듈 파일 생성 새로운 파이썬 파일을 만들고, 원하는 함수, 변수, 클래스 등을 정의합니다. 파일 이름이 모듈 이름이 됩니다. ### 모듈 가져오기 ```python import 모듈명 from 모듈명 import 함수명, 변수명 # 특정 함수나 변수만 가져오려는 경우 ``` 모듈 파일은 먼저 현재 디렉토리에서 찾습니다. 모듈을 찾지 못한 경우에는 `PYTHONPATH` 환경 변수에 지정된 경로에서 찾고, 그 다음에는 `/usr/local/lib/python/` 경로에서 찾습니다. ```python # module1.py def greet(name): print("Hello,", name) # main.py import module1 module1.greet("Alice") ``` ```python import math from math import sqrt, sin from math import * import math as x ``` ## 내장 모듈과 외부 모듈 * 내장 모듈: 파이썬 설치 시 기본적으로 제공되는 모듈입니다. math, random, os 등이 있습니다. * 외부 모듈: 별도로 설치해야 하는 모듈입니다. pip 명령어를 사용하여 설치합니다. 예를 들어, numpy, pandas, matplotlib 등이 있습니다. ### 내장 모듈 * os : 운영 체제와 상호 작용하는 기능 제공 (파일 시스템, 환경 변수 등) - `os.getcwd()`: 현재 작업 디렉토리 반환 - `os.listdir()`: 디렉토리 내 파일 목록 반환 * string : 문자열 처리 관련 함수 * re : 정규 표현식을 사용하여 문자열 처리 - `re.search()`: 문자열에서 패턴 검색 - `re.sub()`: 문자열에서 일치하는 부분을 다른 문자열로 치환 * math : 수학 관련 함수 제공 - `math.sqrt(x)`: x의 제곱근 반환 - `math.sin(x)`: x의 사인 값 반환 * cmath * datetime : 날짜와 시간 관련 기능 제공 - `datetime.datetime.now()`: 현재 날짜와 시간 가져오기 - `datetime.timedelta`: 두 날짜 간의 차이 계산 * time : 시간 관련 함수 * gc * asyncio * collections : 다양한 컨테이너 자료형 제공 (Counter, defaultdict 등) * functools * operator * pickle : 파이썬 객체 직렬화 * socket * sqlite3 * statistics * typing * venv * json : JSON 데이터를 파싱하고 생성하는 기능 제공 - `json.loads()`: JSON 문자열을 파이썬 객체로 변환 - `json.dumps()`: 파이썬 객체를 JSON 문자열로 변환 * csv: CSV 파일 처리 * wsgiref * unittest * random : 난수 생성 함수 제공 - `random.randint(a, b)`: a 이상 b 이하의 임의의 정수 반환 - `random.random()`: 0.0 이상 1.0 미만의 임의의 실수 반환 * sys : 파이썬 인터프리터와 관련된 변수와 함수 제공 - `sys.argv`: 명령줄 인수 리스트 - `sys.exit()`: 프로그램 종료 * requests * itertools : 반복 가능한 객체를 위한 유용한 함수 제공 (combinations, permutations 등) * urllib : 웹 페이지를 다운로드하고 URL을 처리하는 기능 제공 ## 패키지 여러 개의 관련된 모듈을 하나의 디렉토리에 모아 놓은 것을 패키지라고 합니다. 패키지는 점(.)으로 구분된 계층 구조를 가질 수 있습니다. ``` mypackage/ __init__.py module1.py module2.py ``` ```python # main.py import mypackage.module1 mypackage.module1.greet("Alice") ``` 위 예시에서 mypackage는 패키지 이름이고, module1은 모듈 이름입니다. ### 패키지 생성 원하는 디렉토리에 `__init__.py` 파일을 생성해서 패키지를 정의합니다. `__init__.py` 파일은 이 디렉토리가 패키지임을 나타내는 역할을 합니다. 해당 디렉토리에 모듈 파일들을 추가합니다. ```python # phone/__init__.py from Pots import Pots from Isdn import Isdn from G3 import G3 ``` ```python import phone ```