중급 파이썬 Part2 - 모듈(module)

2023. 3. 15. 14:23카테고리 없음

#09강 모듈 -- 함수가 선언되어있는 파이썬 파일 

모듈이란?

* 모듈 구분 > 파이썬 모듈은 내부 모듈, 외부 모듈 그리고 사용자 모듈로 구분할 수 있다.

Q) random 모듈을 이용해서 1부터 10까지의 정수 중 난수 1개를 발생시켜 보자

import random
rNum = random.randint(1,10)
print(f'rNum: {rNum}')

Q) random 모듈을 이용해서 0부터 100사이의 난수 10개를 발생시켜보자.

import random
rNums = random.sample(range(1,101),10)
print(f'rNums: {rNums}')

결과는 리스트 형태로 출력

 

#10. 모듈 제작. 모듈은 파이썬 파일이다!

> 국어, 영어, 수학 점수를 입력하면 총점, 평균을 출력하는 모듈을 만들어보자.

# 모듈 생성 --> 모듈의 이름 scores 

scores = []

def addScore(s):
    scores.append(s)

def getScores():
    return scores

def getTotalScore():
    total = 0
    for s in scores:
        total += s
    return total

def getAvgScore():
    avg = getTotalScore() / len(scores)
    return avg

# 모듈 없이 실행

korScore = int(input('국어 점수 입력:'))
engScore = int(input('영어 점수 입력:'))
matScore = int(input('수학 점수 입력:'))

addScore(korScore)
addScore(engScore)
addScore(matScore)
scores

 

 

 

# 12강. 실행(메인) 파일 지정하기

★★★전역변수 __name__을 이용한 실행파일 지정.

__name__ 이라는 변수는 파이썬에서 기본으로 제공해주는 변수

 

▶__name__에는 모듈이름이 저장되거나 '__main__'이 저장된다.

하지만 실행파일의 경우 아래와 같이 실행한다.

 

 

---> 실행(메일) 파일

 

 

파이썬 파일은 메인 메서드가 없기 때문에 어떤파일을 먼저 시작해야하는지 알 수 없다.

하지만 __name__이라는 전역변수에 자신의 파일명이 아닌 '__main__'이라는 실행파일이 저장되어 있는경우 출발점 프로그램의 실행파일이 된다.

 

__name__의 경우 기본적으로 파일명이 저장된다.

 

만약 addModule파일을 실행하면 

print(f'__name__:{__name__}')은 __name__:__main__이 된다. 실행파일은 곧 '__main__'이다. 자기자신은 곧 실행파일

import addModule
import subModule
import mulModule
import divModule

print(addModule.add(10,20))
print(subModule.sub(10,20))
print(mulModule.mul(10,20))
print(divModule.div(10,20))

import addModule
import subModule
import mulModule
import divModule

def mod(n1,n2):
    return n1 % n2

if __name__ == '__main__':   # 자동실행이 되는 것을 막기 위해 실행파일이 아니면 아래를 출력하지 않음
    print(addModule.add(10,20))
    print(subModule.sub(10,20))
    print(mulModule.mul(10,20))
    print(divModule.div(10,20))

 

#13강 실행(메인)파일 __02

전역변수 __name__을 이용한 실행파일 지정.

▶ 단위 환산 모듈을 만들고 cm를 mm, inch, m, ft로 변환해보자.

# 모듈 파일

def cm_mm(n):
    return round(n * 10,3)

def cm_inch(n):
    return round(n * 0.393, 3)

def cm_m(n):
    return round(n * 0.01, 3)

def cm_ft(n):
    return round(n * 0.032,3)

if __name__=='__main__':
    print(f'10cm: {cm_mm(10)}mm')
    print(f'10cm: {cm_inch(10)}inch')
    print(f'10cm: {cm_m(10)}m')
    print(f'10cm: {cm_ft(10)}ft')

# 실행 파일

import unitConversion as uc

inputNumber = int(input('길이(cm) 입력: '))

returnValue = uc.cm_mm(inputNumber)
print(f'returnValue: {returnValue}mm')

returnValue = uc.cm_inch(inputNumber)
print(f'returnValue: {returnValue}inch')

returnValue = uc.cm_m(inputNumber)
print(f'returnValue: {returnValue}m')

returnValue = uc.cm_ft(inputNumber)
print(f'returnValue: {returnValue}ft')

# 14강. 패키지 : 모듈을 묶어서 관리하자!

▼ package.py

from Calculator_int import addCal
from Calculator_int import subCal
from Calculator_int import mulCal
from Calculator_int import divCal

print(addCal.add(10,20))
print(subCal.sub(10,20))
print(mulCal.mul(10,20))
print(divCal.div(10,20))

from Calculator_float import addCal
from Calculator_float import subCal
from Calculator_float import mulCal
from Calculator_float import divCal

print(addCal.add(10,20))
print(subCal.sub(10,20))
print(mulCal.mul(10,20))
print(divCal.div(10,20))

 

# 15강. site-packages. 어디서나 접근 가능한 패키지를 만들자

지금까지 모듈을 만들고 패키징화 해보았다. 하지만 이러한 모듈은 실행파일과 같은 디렉토리에 있어야만한다.

--> 라이브러리 패키지 --> site-packages 로 옮겨서 실행하면 범용적으로 사용 가능하다.

 

# 16강. 자주 사용하는 모듈. 기본적으로 알아두면 좋은 모듈

#수학 관련 함수
import time

listVar = [2, 5, 3.14, 58, 10, 2]
print(f'sum(listVar) = {sum(listVar)}')  #합
print(f'max(listVar) = {max(listVar)}')  #최댓값
print(f'min(listVar) = {min(listVar)}')  #최솟값
print(f'pow(13,4) = {pow(13,4)}')        #거듭제곱
print(f'{round(3.141592,4)}')            #반올림

import math
print(f'math.fabs(-10): {math.fabs(-10)}') # 절댓값
print(f'math.ceil(5.21): {math.ceil(5.21)}') # 올림
print(f'math.floor(5.21): {math.floor(-5.21)}') # 내림
print(f'math.trunc(5.21): {math.trunc(-5.21)}') # 버림
print(f'math.gcd(14,21): {math.gcd(14,21)}')    # 최대공약수
print(f'math.factorial(10): {math.factorial(10)}') #팩토리얼
print(f'math.sqrt(4): {math.sqrt(4)}')             #제곱근