모듈(Module)이란, 응용 프로그램에 포함하는 기능(변수, 함수, 클래스 등)이 포함되어있는 파일. 파이썬 코드를 구조화하고 코드 재사용을 쉽게 하기 위해 사용. 모듈은 모듈이름에 .py 확장자를 가진 파일로 저장되며, 다른 파이썬 스크립트에서 import 명령어를 사용하여 로드. 모듈내에서 모듈이름은 __name__으로 제공됨.
# 아래 코드가 입력된 mymodule.py 만들기.
def greeting(name):
print("Hello, " + name)
import문을 사용하면 만들 모듈을 사용할 수 있음.
import mymodule
mymodule.greeting("Poke") # 모듈의 함수를 사용할 때는 module_name.function_name을 사용.
Hello, Poke
모듈에는 함수뿐만 아니라 모든 유형(Arrays, Dictionaries, Objects 등)의 변수도 포함할 수 있음.
# mymodule.py
person1 = {
"name": "Poke",
"age": 20,
"country": "Korea"
}
import mymodule
a = mymodule.person1["age"] # mymodule.person1은 mymodule 모듈 내에 정의된 person1 딕셔너리를 참조. 여기서 ["age"]를 사용하여 person1 딕셔너리에서 age 키에 해당하는 값을 추출.
print(a)
20
만약 자주 사용할 거라면, 변수에 대입하여 사용할 수 있다.
greeting = mymodule.greeting
print(greeting("Poke"))
print(greeting("Potato"))
Hello, Poke
Hello, Potato
as 키워드를 사용하여 모듈을 가져올 때 별칭을 만들 수 있다.
import mymodule as mx
a = mx.person1["age"]
from 키워드를 사용하여 모듈의 일부만 가져올 수 있다.
# mymodule.py
def greeting(name):
print("Hello, " + name)
person1 = {
"name": "Poke",
"age": 20,
"country": "Korea"
}
# 만약 mymodule에서 person1의 딕셔너리만 가져오고 싶다면
from mymodule import person1
print (person1["age"])
print(greeting("Poke")
20
NameError: name 'greeting' is not defined
# 모듈이 정의하는 모든 이름 가져오기. _시작하는 것들을 제외한 모든 이름을 import함. 사용자제!
from mymodule import *
만약 필요한 모듈이 기본 경로 외에 다른 위치에 있다면, sys.path에 그 위치를 추가해야 함. 이를 통해 Python은 해당 위치를 검색 경로에 포함시킴.
import sys
sys.path.append('/path/to/your/module')
import mymodule
from 키워드를 사용하여 모듈의 요소를 참조할 때 모듈 이름을 사용X.
# O
person1["age"]
# X
my module.person1["age"]
NameError: name 'mymodule' is not defined
파이썬에는 여러 개의 내장 모듈이 있음.
dir() 함수를 이용해서 모듈의 모든 함수를 나열해보면,
import platform
x = dir(platform)
print(x)
['_WIN32_CLIENT_RELEASES', '_WIN32_SERVER_RELEASES', '__builtins__', '__cached__', '__copyright__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '__version__', '_comparable_version', '_component_re', '_default_architecture', '_follow_symlinks', '_ironpython26_sys_version_parser', '_ironpython_sys_version_parser', '_java_getprop', '_libc_search', '_mac_ver_xml', '_node', '_norm_version', '_platform', '_platform_cache', '_pypy_sys_version_parser', '_sys_version', '_sys_version_cache', '_sys_version_parser', '_syscmd_file', '_syscmd_uname', '_syscmd_ver', '_uname_cache', '_ver_output', '_ver_stages', 'architecture', 'collections', 'java_ver', 'libc_ver', 'mac_ver', 'machine', 'node', 'os', 'platform', 'processor', 'python_branch', 'python_build', 'python_compiler', 'python_implementation', 'python_revision', 'python_version', 'python_version_tuple', 're', 'release', 'sys', 'system', 'system_alias', 'uname', 'uname_result', 'version', 'win32_edition', 'win32_is_iot', 'win32_ver']
dir()함수는 사용자 정의모듈을 포함한 모든 모듈의 함수를 가져올 수 있다.
참고) help('modules') 명령어는 현재 파이썬 환경에서 사용 가능한 모든 모듈의 목록을 제공함.
os 모듈
os 모듈은 운영 체제와 상호 작용하기 위한 다양한 함수를 제공. os 모듈을 사용하여 파일 시스템을 탐색하고, 파일을 관리하고, 프로세스 환경에 대한 정보를 얻거나 수정할 수 있음. 예를 들어, 파일 경로를 조작하거나, 현재 작업 디렉터리를 변경하거나, 환경 변수에 접근하는 등.
import os
os.getcwd() # 현재 작업 디렉터리 얻기
os.listdir() # 현재 디렉터리의 파일 목록 얻기
sys 모듈
sys 모듈은 파이썬 인터프리터와 강하게 연결된 변수와 함수를 제공. sys 모듈을 통해 파이썬 인터프리터에 대한 설정을 조회하거나 조작할 수 있음. 예를 들어, 인자를 명령줄에서 스크립트로 전달하거나, 최대 재귀 깊이를 설정하거나, 표준 입출력을 조작할 수 있음.
import sys
sys.argv # 명령줄에서 인수 얻기
sys.exit() # 스크립트 종료
json 모듈
json 모듈은 JSON 데이터를 파이썬 데이터 구조로 변환하고 그 반대의 변환을 수행하는 함수를 제공.
import json
json.dumps({'name': 'Poke', 'age': 20}) # 파이썬 객체를 JSON 문자열로 변환
json.loads('{"name": "Poke", "age": 20}') # JSON 문자열을 파이썬 객체로 변환
'{"name": "Poke", "age": 20}'
{'name': 'Poke', 'age': 20}
collections 모듈
collections 모듈은 특수 컨테이너 데이터 타입을 제공. defaultdict, OrderedDict, Counter, deque 등.
from collections import Counter
Counter(['a', 'b', 'c', 'a', 'b', 'b']) # 요소의 빈도를 계산하여 저장
Counter({'a': 2, 'b': 3, 'c': 1})
모듈(Module)
모듈은 파이썬 코드를 포함하는 파일로, 함수, 변수, 클래스 등이 정의되어있음. 모듈은 .py 파일로 저장되며, 이 파일 하나가 하나의 모듈을 구성하며 다른 파이썬 스크립트에서 import하여 사용할 수 있음. 모듈은 코드를 재사용하기 쉽게 만들고, 프로그램을 더욱 체계적으로 관리할 수 있음.
패키지(Package)
패키지는 여러 모듈을 포함하고 구성하는 디렉토리. 패키지를 사용하면 코드를 더 구조적으로 조직할 수 있으며, 대규모 프로그램을 쉽게 관리할 수 있음. 패키지는 디렉토리에 __init__.py 파일을 두어 해당 디렉토리를 패키지로 인식하게함. __init__.py는 이 함수들을 패키지 레벨에서 접근 가능하게 만듬. 예를 들어 모듈 이름 A.B는 A라는 이름의 패키지에서 B라는 이름의 서브모듈을 지정함.
financial/ # 패키지 디렉토리
__init__.py # 패키지를 초기화하는 파일
taxes.py # 세금 계산 모듈
budget.py # 예산 관리 모듈
# 패키지내의 모듈 사용하는 방법
from financial.taxes import calculate_tax
tax = calculate_tax(income)