121 lines
4.4 KiB
Markdown
121 lines
4.4 KiB
Markdown
# 모듈
|
|
|
|
모듈은 파이썬 코드를 논리적으로 분리하고 재사용하기 위한 기본 단위입니다. 하나의 파이썬 파일(.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
|
|
``` |