모듈

  • 데이터, 함수, 클래스 등이 담겨져 있는 파일
  • 외부의 라이브러리(모듈)을 사용하기 위해서는 따로 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문 안에 문장이 실행됨

카테고리:

업데이트:

댓글남기기