파이썬기초-16 모듈과 패키지
모듈
- 데이터, 함수, 클래스 등이 담겨져 있는 파일
- 외부의 라이브러리(모듈)을 사용하기 위해서는 따로 import하는 작업이 필요
파이썬 표준 모듈(라이브러리)
- 파이썬에서 기본적으로 제공해주는 유용한 모듈들이 있음
- 모듈을 사용할 때에는
import
에 선언한 모듈명을 쓰고 원하는 이름으로 하고 싶을때에는as
를 사용하면 됨
sys.builtin_module_names
를 통해 내장 모듈을 볼 수 있음
종류 | 설명 |
---|---|
random |
다양한 난수 생성 함수 |
statistics |
수학 통계 함수(산술평균, 표준편차 등) |
itertools |
효율적인 루핑을 위한 이터레이터를 만드는 함수(곱집합, 순열, 조합 등) |
math |
수학 함수 |
time |
시간 액세스와 변환 함수 |
sys |
시스템 특정 파라미터와 함수 |
import math
print(math.factorial(5))
import random as rd
print(rd.random())
import time
print(time.gmtime(time.time()))
print(time.gmtime(time.time()).tm_year)
print(time.gmtime(time.time()).tm_mon)
print(time.gmtime(time.time()).tm_mday)
import sys
print(sys.builtin_module_names)
120
0.7656969007189037
time.struct_time(tm_year=2023, tm_mon=1, tm_mday=25, tm_hour=14, tm_min=8, tm_sec=41, tm_wday=2, tm_yday=25, tm_isdst=0)
2023
1
25
('_abc', '_ast', '_bisect', '_blake2', '_codecs', '_codecs_cn', '_codecs_hk', '_codecs_iso2022', '_codecs_jp', '_codecs_kr', '_codecs_tw', '_collections', '_contextvars', '_csv', '_datetime', '_functools', '_heapq', '_imp', '_io', '_json', '_locale', '_lsprof', '_md5', '_multibytecodec', '_opcode', '_operator', '_peg_parser', '_pickle', '_random', '_sha1', '_sha256', '_sha3', '_sha512', '_signal', '_sre', '_stat', '_statistics', '_string', '_struct', '_symtable', '_thread', '_tracemalloc', '_warnings', '_weakref', '_winapi', '_xxsubinterpreters', 'array', 'atexit', 'audioop', 'binascii', 'builtins', 'cmath', 'errno', 'faulthandler', 'gc', 'itertools', 'marshal', 'math', 'mmap', 'msvcrt', 'nt', 'parser', 'sys', 'time', 'winreg', 'xxsubtype', 'zlib')
사용자 정의 모듈
- 사용자가 사용할 모듈을 직접 정의
- 모듈 이름으로 파일명을 사용
Practice_module.py 생성
def func1(): print("1번 함수") def func2(): print("2번 함수") def func3(): print("3번 함수")
import Practice_module
Practice_module.func1()
Practice_module.func2()
Practice_module.func3()
# 모듈안의 메서드를 모두 import 함
from Practice_module import *
func1()
func2()
func3()
1번 함수
2번 함수
3번 함수
1번 함수
2번 함수
3번 함수
패키지
- 하나의 디렉토리에 모듈들을 모아놓은 집합
- import에 선언한 패키지 명을 쓰고 뒤에 모듈을 사용하면 됨
from urllib import request
response = request.urlopen("https://google.com")
print(response.status)
200
사용자 정의 패키지
- 패키지도 모듈처럼 사용자가 직접 정의 할 수 있음
- 패키지 내 각 디렉토리에는
__init__.py
파일이 반드시 존재해야함. 이 파일은 비어도 되고 패키지 내 포함된 모듈들의 정보를 제공할 수도 있음travel폴더 생성 후 폴더 안에 vietnam.py, thailand.py,
__init__.py
생성
# thailand.py
class ThailandPackage():
def detail(self):
print("[태국패키지 3박 5일] 방콕, 파타야 여행 50만원")
# vietnam.py
class VietnamPackage():
def detail(self):
print("[베트남패키지 3박 5일] 다낭, 호도 여행 60만원")
from travel import vietnam
trip = vietnam.VietnamPackage()
trip.detail()
# import travel.thailand
# import를 사용할 때 뒷부분은 모듈이나 패키지만 작성가능(모듈 내 클래스나 함수는 작성불가)
from travel.thailand import ThailandPackage
trip = ThailandPackage()
trip.detail()
[베트남패키지 3박 5일] 다낭, 호도 여행 60만원
[태국패키지 3박 5일] 방콕, 파타야 여행 50만원
__all__
- 패키지 내 모듈을 전부 import할 때 오류가 발생
- 사용자가 공개 범위를 설정할 때 사용
# __init__.py
__all__ = ["vietnam", "thailand"]
from travel import *
# vetnam.VietnamPackage() # 오류가 남
# 전체를 import 하려면 공개범위를 설정 해야 함
trip = vietnam.VietnamPackage()
trip.detail()
trip = thailand.ThailandPackage()
trip.detail()
[베트남패키지 3박 5일] 다낭, 호도 여행 60만원
[태국패키지 3박 5일] 방콕, 파타야 여행 50만원
__name__ == "__main__"
__name__
변수는 내부적으로 사용되는 매직메서드임- 직접 모듈의 파일을 실행하는 경우에
__name__
변수에__main__
이라는 값이 할당됨 __name__ == "__main__"
이라는 것은 터미널에서 직접 파일이 호출되어 사용될 때 사용
# thailand.py
# 추가
if __name__ == "__main__":
print("이 문장은 모듈을 직접 실행할때 작동")
trip_to = ThailandPackage()
trip_to.detail()
else:
print("외부에서 모듈 호출")
터미널 창에서 python thailand.py 를 실행하면 if문 안에 문장이 실행됨
댓글남기기