패키지와 모듈

2023. 3. 14. 14:42Python/실전 예제로 배우는 파이썬 프로그래밍

파이썬을 설치하면 사용자 컴퓨터에 기본적으로 파이썬의 기본 라이브러리(Library)가 설치됩니다. 라이브러리는 폴더의 모양을 띤 패키지(Package)와 파일(*. py) 형식으로 제공하는 모듈(Module)로 분류됩니다. 패키지는 관련 있는 모듈들을 하나의 꾸러미 형태로 묶어주는 역할이고, 모듈은 함수나 클래스를 파일로 작성해서 제공됩니다.

 

라이브러리 import

라이브러리를 사용하기 위해서는 먼저 패키지나 모듈을 import해야 합니다.

 

형식

import 모듈	# 모듈 멤버 가져오기
import 패키지.모듈	# 패키지에 포함된 모듈의 멤버 가져오기
from 패키지.모듈 import 함수, 클래스, ...	# 함수, 클래스 가져오기

산포도 패키지(myPackage)는 산포도 모듈(scattering.py)을 포함하고 있고, 산포도 모듈은 산포도의 통계를 구하는 분산(variance)과 표준편차(standard deviation)를 계산하는 함수를 포함하고 있습니다. 또한 사용 패키지(lecture)는 사용 모듈(step09_module.py)을 포함하고 있고, 사용 모듈은 산포도 모듈의 분산과 표준편차 함수를 import 하여 사용하는 모듈입니다.

 

실습 scattering 모듈 내용

# (1) 평균과 제곱근 모듈 import
from statistics import mean
from math import sqrt

# (2) 산술평균 함수
def Avg(data):
	avg = mean(data)
    return avg

# (3) 분산/표준편차 함수
def var_sd(data):	# [2, 4, 5, 6, 1, 8] - avg
    avg = Avg(data)	# 함수 호출
    diff = [(d - avg) ** 2 for d in data]	# list 내포
    var = sum(diff) / (len(data) - 1)
    sd = sqrt(var)
    
    return var, sd

# (1) 평균과 제곱근 모듈 import

분산과 표준편차의 수식을 작성하기 위해서 statistics 모듈에서 평균(mean) 함수를  가져오고, math 모듈에서 제곱근(sqrt) 함수를 가져옵니다. 

 

# (2) 산술평균 함수

mean() 함수를 이용하여 data를 대상으로 산술평균을 계산하고, 반환합니다.

 

# (3) 분산/표준편차 함수

산술평균 함수를 호출하여 data의 산술평균을 반환받은 후 분산 수식에 의해서 분산을 계산하고, sqrt()함수를 이용하여 분산의 양의 제곱근을 적용하여 표준편차를 계산하는 함수입니다.

 

산포도(scatter)

평균을 중심으로 자료들이 얼마나 흩어져 있는지의 정도를 나타내는 통계학 용어입니다. 산포도의 통계량으로는 분산(variance), 표준편차(standard deviation)가 주로 많이 사용됩니다.

 

사용 모듈은 산포도 모듈의 함수를 사용하기 위해서 두가지 방법으로 import 하여 분산과 표준편차를 사용합니다.

 

방법1) import 최상위패키지.하위패키지.모듈
방법2) from 최상위패키지.하위패키지 import 함수1, 함수2

 

방법1)은 import 된 모듈의 전체 멤버(함수 or 클래스)를 가져오는 방법이고, 방법 2)는 모듈의 멤버 중에서 특정 멤버만 가져오는 방법입니다. 방법 1)은 import 명령문 형식은 간단하지만 모듈에 포함된 멤버가 많은 경우 모든 멤버를 가져오기 때문에 소요되는 시간이 길어집니다. 방법 2)는 import 명령문은 길지만 대신에 특정 멤버만 가져오기 때문에 소요되는 시간이 비교적 짧습니다.

 

실습 step09_module 모듈 내용

# 1. 모듈 추가(방법1)
# 형식) import 패키지명.모듈명
import chapter06.myPackage.scattering

# 데이터 셋
data = [1, 3, 1.5, 2, 1, 3.2]

# 산술평균 함수 호출
print('평균: ', chapeter06.myPackage.scattering.Avg(data))

평균: 1.95

# 분산과 표준편차 함수 호출
var, sd = chapter06.myPackage.scattering.var_sd(data)
print('분산: ', var)
print('표준편차: ', sd)

분산: 0.9350000000000
표준편차: 0.966953980290

# 2. 모듈 추가(방법2)
# 형식) from 패키지명.모듈명 import 함수명
from chapter06.mypackage.scattering import Avg, var_sd

print('평균: ', Avg(data))

평균: 1.95

var, sd = var_sd(data)
print('분산:', var)
print('표준편차:', sd)

분산: 0.9350000000000
표준편차: 0.966953980290

# 1. 모듈 추가(방법1)

import 명령어로 다른 패키지의 모듈을 가져오기 위해서는 다음 형식과 같이 구분자(.)를 이용하여 상위패키지, 하위 패키지명, 모듈 순서대로 나열하여 import 합니다.

 

import 상위패키지명. 하위패키지명. 모듈명

 

패키지와 모듈의 경로가 복잡하고 긴 경우 코딩하기 어렵기에 import 명령문에서 별칭을 지정하고, '별칭. 함수명()' 형식으로 함수를 호출할 수 있습니다.

 

import 상위패키지명. 하위패키지명. 모듈명 as 별칭

 

import chapter06.myPackage.scattering as scattering으로 패키지 경로에 scattering 별칭을 지정하면 var_sd() 함수를 호출할 때 scattering.var_sd(data) 형식으로 호출할 수 있습니다.

 

# 2. 모듈 추가(방법 2)

from 명령어로 다른 패키지의 모듈을 가져오기 위해서는 다음 형식과 같이 from 다음에 상위패키지, 하위 패키지명, 모듈 순서대로 나열하고, import 다음에 호출할 함수명을 작성합니다.

 

from 상위패키지명. 하위패키지명. 모듈명 import 함수명

 

시작점(main) 만들기

모듈 안에는 변수, 함수, 클래스 그리고 명령문 등을 포함할 수 있습니다. 이러한 모듈 안에서 프로그램이 시작되는 시작점(메인(main))을 만들 수 있습니다. 

 

형식

if __name__ == "__main__":	# 프로그램 시작점
	명령문

다음 예문은 분산과 표준편차 함수를 포함하고 있는 scattering 모듈 안에서 프로그램 시작점을 기분으로 data를 만들고, data를 실인수로 하여 평균, 분산, 표준편차 함수를 호출한 다음 결과를 출력한 예문입니다. 만약 다른 모듈에서 scattering 모듈을 import 하는 경우 프로그램 시작점 다음 문장은 실행되지 않습니다.

 

실습 프로그램 시작점 만들기 예시

# (1) 평균과 제곱근 모듈 import
from statistics improt mean
from math import sqrt

# (2) 산술평균 함수
def Avg(data):
	avg = mean(data)
    return avg

# (3) 분산/표준편차 함수
def var_sd(data):	# [2, 4, 5, 6, 1, 8] - avg
	avg = Avg(data)	# 함수 호출
    diff = [(d - avg) ** 2 for d in data]	# list 내포
    var = sum(diff) / (len(data) - 1)
    sd = sqrt(var)
    return var, sd

# 프로그램 시작점
if __name__ == "__main__":
	data = [1, 3, 5, 7]
    print('평균=', Avg(data))
    
평균= 4

    var, sd = var_sd(data)
    print('분산=', var)
    print('표준편차=', sd)

분산 = 6.666666666666667
표준편차 = 2.581988897471611

다음 예문은 scattering 모듈에서 프로그램 시작점이 없는 예문입니다. 프로그램 시작점을 지정하지 않고, 평균, 분산, 표준편차 함수를 호출하고, print() 함수를 이용하여 결과를 출력했다면 다른 모듈에서 scattering 모듈을 import 하면 print() 함수의 결과도 함께 출력됩니다.

 

실습 프로그램 시작점이 없는 경우 예시

# (1) 평균과 제곱근 모듈 import
from statistics import mean
from math import sqrt

# (2) 산술평균 함수
def Avg(data):
	avg = mean(data)
    return avg

# (3) 분산/표준편차 함수
def var_sd(data):	# [2, 4, 5, 6, 1, 8] - avg
	avg = Avg(data)	# 함수 호출
    diff = [(d - avg) ** 2 for d in data]	 # list 내포
    var = sum(diff) / (len(data) - 1)
    sd = sqrt(var)
    
    return var, sd

# 프로그램 시작점 없음
data = [1, 3, 5, 7]
print('평균=', Avg(data))

평균= 4

var, sd = var_sd(data)
print('분산=', var)
print('표준편차=', sd)

분산 = 6.666666666666667
표준편차 = 2.581988897471611

다음 예문은 프로그램 시작점이 없는 scattering 모듈을 module_import  모듈에서 import 하는 예시입니다. import 명령문으로 scattering 모듈을 import 하면 scattering 모듈의 함수도 가져오지만 data와 print() 함수도 함께 실행됩니다.

 

실습 scattering 모듈 import 예시

import chapter06.myPackage.scattering

평균= 4
분산 = 6.666666666666667
표준편차 = 2.581988897471611

다른 모듈에서 scattering 모듈의 함수만 가져오고, 나머지는 실행되지 않도록 하기 위해서는 프로그램 시작점을 만들어야 합니다.

'Python > 실전 예제로 배우는 파이썬 프로그래밍' 카테고리의 다른 글

정규 표현식(Regular Expression)  (0) 2023.03.16
객체지향프로그래밍 연습문제  (0) 2023.03.15
내장클래스  (0) 2023.03.13
객체지향 기법  (0) 2023.03.12
클래스(Class)  (0) 2023.03.11