반응형

 파이썬 기초#7】 파이썬 기초 한방에 정리하기!  #3편 , 모듈의 생성과 활용 핵심 요약, 총정리!

(내용은 게시글 마지막 부분부터 계속 추가 예정입니다 , 마지막 편집일: 21.08.08)

아래 1편의 내용을 먼저 참고하세요
▶ 파이썬 한 방에 정리 1편 보기  : https://rasino.tistory.com/333  
▶ 파이썬 한 방에 정리 2편 보기  : https://rasino.tistory.com/334  

1. 《  사용자 정의 모듈 만들기 》
 : 활용 빈도가 높은 내용을 사용자 정의 함수 형태의 파일(.py)로 만들어 다른 파이썬 코드에서도 쓸 수 있게 만든 것을 말합니다.   마치 C언어에서 "xxx.h" 헤더 파일을 활용하는 형태와 유사합니다. 
일반적인 사용자 정의 함수는 하나의 파일 내에서 서브루틴 형태로만 사용되지만, 헤더 파일 활용하듯 별도의 파이썬 파일로 만들어 사용하는 것을 말하며,  이를 파이썬에서는 보통 모듈이라고 합니다.   이런 모듈은 다른 사용자에게 줘서 활용할 수도 있는데, 대표적으로 수학 관련 모듈이나, 데이터 관련 모듈이 이에 해당됩니다. 

그럼, 아주 간단한 예시로,  아래처럼,  인치(inch)를 입력하면 mm(밀리미터) 혹은,  cm(센티미터)로 바꾸어 주는 함수를 만들어 보겠습니다. 

사용자 정의 함수로 인치를 밀리미터로 바꾸어주는 함수 inch2mm( )와 인치를 센티미터로 바꾸어 주는  함수 inch2cm( )를 만들어 정의하였고 , 2인치(inch)라는 수와 3인치라는 수를 각각 넣은 결과를 보여 주고 있습니다. 
 그럼, 인치를 밀리미터로 변환하는 파일(inch2mm.py)을 만들어 main( ) 함수 파일에서 모듈로서 import 하여 사용하고,    마찬가지로,  인치를 센티미터로 변환하는 파일(inch2cm.py)을 만들어 main( ) 함수 파일에서 모듈로서 import 하여 사용해보는 코드를 작성해 볼게요.  main ( ) 코드의 파일 이름은,  "inch2mm_cm.py"로 하겠습니다. 

1. 먼저, 인치를 밀리미터로 변환하는 파일(inch2mm.py) 입니다. 

2. 다음, 인치를 센티미터로 변환하는 파일(inch2cm.py) 입니다. 

3. 그럼, 메인 파일(inch2mm_cm.py) 입니다. 

# Rasino ioT 모듈(함수) 사용하기 실습
# inch2mm_cm.py

# import할 때는 파일의 확장자 .py를 제외하고 적어 주어야 함! 

import inch2mm   # 인치를 mm로 변환하는 모듈(파일.py) 사용 선언
import inch2cm   # 인치를 cm로 변환하는 모듈(파일.py) 사용 선언

def main():
    
    inch_num = float(input ("인치(inch)값 입력:"))
    inch_mm = round(inch2mm.inch2mm(inch_num),2)
    inch_cm = round(inch2cm.inch2cm(inch_num),2)
    print("입력 값",inch_num,"은 ",inch_mm,"mm이며, 또는",inch_cm,"cm입니다")

main()


4.  메인파일(inch2mm_cm.py)에서 실행시켜 결과 확인하기.

보이는 것처럼,  인치값으로 3을 입력했을 때, mm 변환 값과, cm 변환 값이 출력되었고, 
다른 인치값 2를 입력했을 때도, 잘 출력된 것을 볼 수 있습니다.  
처음 3인치를 입력했을 때, 딱 떨어지지 않은 아주 긴 소수점 값으로 나오기에,  소수 2자리까지로 제한하기 위해 round( ) 함수를 사용했습니다.

  주의해야 하는 사항은, 위에서 작성한 3개의 파일 모두 하나의 같은 폴더에 있어야 합니다. 
  import를 선언할 때는 파일의 확장자 .py를 제외하고 적어 주어야 합니다!
 그리고,  모듈(파일)을 가져다(import) 쓸 때는,  적용하고 싶은 함수만 가져다(import) 쓸 수 있습니다. 
 (예시,  from unit_converter import inch2cm  )

그럼,  단위 변환을 주제로,  사용자 정의 모듈을 만들어 활용해보는 예제를 만들어 볼게요. 
실제 단위 변환에 종종 사용될 수 있는 항목으로 18개를 준비하였으니, 활용해 보세요.
1. 단위 변환 18종 파일(unit_converter.py)

# unit_converter.py  (단위 변환기)

#1 인치(in) → 센티미터(cm)
def inch2cm(num):
    return num * 2.54

#2 인치(in) → 밀리미터(mm)
def inch2mm(num):
    return num * 25.4

#3 밀리미터(mm) → 인치(in)
def mm2inch(num):
    return num / 25.4

#4 피트(ft) → 센티미터(cm)
def ft2cm(num):
    return num * 30.48

#5 야드(yd) → 센티미터(cm)
def yd2cm(num):
    return num * 91.44

#6 마일(mile) → 미터(m)
def mile2m(num):
    return num * 1609.34

#7 리(里) → 미터(m)
def li2m(num):
    return num * 392.73

#8 평(平) → 제곱미터(m2)
def p2m2(num):
    return num * 3.31

#9 제곱미터(m2) → 평(平)
def m22p(num):
    return num * 0.3

#10 헥타르(ha) → 제곱미터(m2)
def ha2m2(num):
    return num * 10000

#11 온스(oz) → 그램(g)
def oz2g(num):
    return num * 28.35

#12 파운드(lb) → 그램(g)
def lb2g(num):
    return num * 453.59

#13 근 → 그램(g)
def geun2g(num):
    return num * 600

#14 갤런(gal) → 리터(l)
def gal2l(num):
    return num * 3.79

#15 되(doe) → 리터(L)
def doe2g(num):
    return num * 1.8

#16 말(斗) → 리터(L)
def mal2g(num):
    return num * 18

#17 섭씨(C) → 화씨(F)
def C2F(num):
    return ((num * 1.8)+32)

#18 화씨(F) → 섭씨(C)
def F2C(num):
    return ((num-32)/ 1.8)

unit_converter.py
0.00MB


2. 단위 변환 메인 파일(unit_main.py)

# Rasino ioT 모듈(함수) 사용하기 응용실습(단위 변환기)
# unit_main.py

# import할 때는 파일의 확장자 .py를 제외하고 적어 주어야 함! 
# import 내용 중에 적용하고 싶은 함수만 따로 적용할 수 있음.(from~ import~)
# 예시 from unit_converter import inch2cm

import unit_converter  

def main():
    print("")
    print("######################################################################################")
    print("1.인치(in) → 센티미터(cm) || 2.인치(in)  → 밀리미터(mm) || 3.밀리미터(mm) → 인치(in)")
    print("4.피트(ft) → 센티미터(cm) || 5.야드(yd)  → 센티미터(cm) || 6.마일(mile) → 미터(m)")
    print("7.  리(里) → 미터(m)      || 8.  평(平)  → 제곱미터(m2) || 9. 제곱미터(m2) → 평(平)")
    print("10.헥타르(ha)→제곱미터(m2)|| 11.온스(oz) → 그램(g)      || 12. 파운드(lb) → 그램(g)")
    print("13.   근(斤) → 그램(g)    || 14.갤런(gal)→ 리터(L)      || 15. 되(doe) → 리터(L)")
    print("16.   말(斗) → 리터(L)    || 17. 섭씨(C) → 화씨(F)      || 18. 화씨(F) → 섭씨(C)")
    print("######################################################################################")    
    
    select = int(input("어떤 단위를 변환 할까요?  (exit=0)"))

    if (select == 1) :
        num = float(input ("인치(inch)값 입력:"))
        convert = round(unit_converter.inch2cm(num),2)
        print(num,"inch는",convert,"cm입니다")    
    
    elif (select == 2) :
        num = float(input ("인치(in)값 입력:"))
        convert = round(unit_converter.inch2mm(num),2)    
        print(num,"inch는",convert,"mm입니다")    

    elif (select == 3) :
        num = float(input ("밀리미터(mm)값 입력:"))
        convert = round(unit_converter.mm2inch(num),2)    
        print(num,"mm는",convert,"inch입니다")    

    elif (select == 4) :
        num = float(input ("피트(ft)값 입력:"))
        convert = round(unit_converter.ft2cm(num),2)    
        print(num,"ft는",convert,"cm입니다")    

    elif (select == 5) :
        num = float(input ("야드(yd)값 입력:"))
        convert = round(unit_converter.yd2cm(num),2)    
        print(num,"yd는",convert,"cm입니다")

    elif (select == 6) :
        num = float(input ("마일(mile)값 입력:"))
        convert = round(unit_converter.mile2m(num),2)    
        print(num,"mile은",convert,"m입니다")
        
    elif (select == 7) :
        num = float(input ("리(里)값 입력:"))
        convert = round(unit_converter.li2m(num),2)    
        print(num,"리(里)는",convert,"m입니다")

    elif (select == 8) :
        num = float(input ("평(平)값 입력:"))
        convert = round(unit_converter.p2m2(num),2)    
        print(num,"평(平)은",convert,"m2(제곱미터)입니다")

    elif (select == 9) :
        num = float(input ("제곱미터(m2)값 입력:"))
        convert = round(unit_converter.m22p(num),2)    
        print(num,"제곱미터(m2)는",convert,"평(平)입니다")

    elif (select == 10) :
        num = float(input ("헥타르(m2)값 입력:"))
        convert = round(unit_converter.ha2m2(num),2)    
        print(num,"헥타르(ha)는",convert,"m2(제곱미터)입니다")

    elif (select == 11) :
        num = float(input ("온스(oz)값 입력:"))
        convert = round(unit_converter.oz2g(num),2)    
        print(num,"온스(oz)는",convert,"g(그램)입니다")

    elif (select == 12) :
        num = float(input ("파운드(lb)값 입력:"))
        convert = round(unit_converter.lb2g(num),2)    
        print(num,"파운드(lb)는",convert,"g(그램)입니다")
        
    elif (select == 13) :
        num = float(input ("근(斤)값 입력:"))
        convert = round(unit_converter.geun2g(num),2)    
        print(num,"근(斤)은",convert,"g(그램)입니다")
        
    elif (select == 14) :
        num = float(input ("갤런(gal)값 입력:"))
        convert = round(unit_converter.gal2l(num),2)    
        print(num,"갤런(gal)은",convert,"L(리터)입니다")

    elif (select == 15) :
        num = float(input ("되(升)값 입력:"))
        convert = round(unit_converter.doe2g(num),2)    
        print(num,"되(升)는",convert,"L(리터)입니다")

    elif (select == 16) :
        num = float(input ("말(斗)값 입력:"))
        convert = round(unit_converter.mal2g(num),2)    
        print(num,"말(斗)은",convert,"L(리터)입니다")        

    elif (select == 17) :
        num = float(input ("섭씨(C)값 입력:"))
        convert = round(unit_converter.C2F(num),2)    
        print("섭씨",num,"C는, 화씨",convert,"F입니다")        

    elif (select == 18) :
        num = float(input ("화씨(C)값 입력:"))
        convert = round(unit_converter.F2C(num),2)    
        print("화씨",num,"F는, 섭씨",convert,"C입니다")

    else :
        pass

  
main()

unit_main.py
0.00MB

3.  아래는 위 코드를 실행한 결과입니다. 

※ 모듈을 가져다 쓰는 방법 두 가지

1. 모듈을 가져다 쓸 때 위의 예시처럼, 모듈 파일 전체를 포함(import) 시키는 방법이 있습니다. 
  → import unit_converter      (unit_converter.py 모듈 파일 전체를 포함(가져다) 쓰겠다)
2. 모듈 파일 속에 필요한 함수만 골라서 포함(import)시켜 사용할 수 있습니다. 
  → from unit_converter import inch2cm    (unit_converter.py 모듈 속의 '인치를 cm'로 변환하는 함수만 사용)
  → from unit_converter import ft2cm        (unit_converter 모듈 속의 '피트ft를 cm'로 변환하는 함수만 사용)
  또는 한 줄로 선언할 수도 있습니다.
  → from unit_converter import inch2cm, ft2cm   (unit_converter 모듈 속의 inch2cm와 ft2cm을 가져다 쓰겠다)

   하지만, 이렇게 할 경우, 원래의 함수 이름(inch2cm)과 가져다 쓰려고 선언한 이름(inch2cm)이 같아서 컴파일하면 오류가 생기게 되는데요,  그래서,  가져다 쓰려고 선언하는 이름을 'as' 단어를 붙여서 선언하게 됩니다. (아래)
  → from unit_converter import inch2cm as i2c   (unit_converter.py 모듈 속의 '인치를 cm'로 변환하는 함수를 i2c라는 이름으로 사용하겠다)
  → from unit_converter import ft2cm as f2m   (unit_converter 모듈 속의 '피트ft를 cm'로 변환하는 함수를 f2m라는 이름으로 사용하겠다)
 이렇게 as를 사용하면, 선언할 모듈(함수)의 이름이 길 경우 줄여서 사용할 수 있는 장점도 있습니다. 

unit_converter.py 함수 중에서, 필요한 몇 가지 함수만 as라는 이름으로 바꾸어 사용한 코드

from unit_converter import inch2cm as i2c
from unit_converter import inch2mm as i2m
from unit_converter import mm2inch as m2i
from unit_converter import ft2cm  as f2c

def main():
    print("")
    print("######################################################################################")
    print("1.인치(in) → 센티미터(cm) || 2.인치(in)  → 밀리미터(mm) || 3.밀리미터(mm) → 인치(in)")
    print("4.피트(ft) → 센티미터(cm) || 5.야드(yd)  → 센티미터(cm) || 6.마일(mile) → 미터(m)")
    print("7.  리(里) → 미터(m)      || 8.  평(平)  → 제곱미터(m2) || 9. 제곱미터(m2) → 평(平)")
    print("10.헥타르(ha)→제곱미터(m2)|| 11.온스(oz) → 그램(g)      || 12. 파운드(lb) → 그램(g)")
    print("13.   근(斤) → 그램(g)    || 14.갤런(gal)→ 리터(L)      || 15. 되(doe) → 리터(L)")
    print("16.   말(斗) → 리터(L)    || 17. 섭씨(C) → 화씨(F)      || 18. 화씨(F) → 섭씨(C)")
    print("######################################################################################")    
    
    select = int(input("어떤 단위를 변환 할까요?  (exit=0)"))

    if (select == 1) :
        num = float(input ("인치(inch)값 입력:"))
        convert = round(i2c(num),2)
        print(num,"inch는",convert,"cm입니다")    
    
    elif (select == 2) :
        num = float(input ("인치(in)값 입력:"))
        convert = round(i2m(num),2)    
        print(num,"inch는",convert,"mm입니다")    

    elif (select == 3) :
        num = float(input ("밀리미터(mm)값 입력:"))
        convert = round(m2i(num),2)    
        print(num,"mm는",convert,"inch입니다")    

    elif (select == 4) :
        num = float(input ("피트(ft)값 입력:"))
        convert = round(f2c(num),2)    
        print(num,"ft는",convert,"cm입니다")

unit_converter.py 함수 중에서, 필요한 몇 가지 함수만 as라는 이름으로 바꾸어 사용한 코드입니다.

아래는 위 코드의 실행 결과입니다. 

 

2. 《 빌트인 모듈(built-in module)
 :  빌트인 가전제품처럼,  파이썬에도 빌트인 모듈(함수)라는 것이 있는데, 파이썬을 설치하게 되면 바로 활용할 수 있는 모듈을 말합니다.  
예를 들면,  print, input,  abs,  eval,  chr 등이 있습니다.   따라서 빌트인 함수들은 별다른 정의 없이 기존 정의된 대로 사용할 수 있게 되며,  파이썬 shell 프롬프트에서 아래처럼 print(  형태로 입력 후 나타나는 주석을 참고할 수 있습니다. 

그리고, (아래) 매개변수 값 입력 없이,  print  ,   input  등으로 입력해보면,  해당 함수는 built-in 함수라는 것을 알려줍니다.

이와 같은 기본 빌트인 함수들에는 아래와 같은 것이 있습니다. 

파이썬 내장 함수들 ( Built-in Functions )
abs( ) dict( ) help( ) min( ) setattr( )
all( ) dir( ) hex( ) next( ) slice( )
any( ) divmod( ) id( ) object( ) sorted( )
ascii( ) enumerate( ) input( ) oct( ) staticmethod( )
bin( ) eval( ) int( ) open( ) str( )
bool( ) exec( ) isinstance( ) ord( ) sum( )
bytearray( ) filter( ) issubclass( ) pow( ) super( )
bytes( ) float( ) iter( ) print( ) tuple( )
callable( ) format( ) len( ) property( ) type( )
chr( ) frozenset( ) list( ) range( ) vars( )
classmethod( ) getattr( ) locals( ) repr( ) zip( )
compile( ) globals( ) map( ) reversed( ) __import__( )
complex( ) hasattr( ) max( ) round( )  
delattr( ) hash( ) memoryview( ) set( ) (Rasino ioT)

 

그 외에,  루트 값, 절대 값, 싸인, 코싸인,  파이값 등 수학 관련 함수들을 따로 모아 놓은 math라는 모듈 함수가 있는데요,   40개 이상의 함수가 들어 있으며,  간단히 import math라고 선언만 해주면, 사용할 수 있습니다.  

수학 함수 종류 math.~~~
math.pi π
math.e e
math.sin(x) sin 𝒳
math.cos(x) cos 𝒳
math.tan(x) tan 𝒳
math.asin(x) arcsin 𝒳
math.acos(x) arccos 𝒳
math.atan(x) arctan 𝒳
math.log(x) ln 𝒳
math.log10(x) log10 𝒳 
math.log2(x) log2 𝒳
math.exp(x) e^𝒳
math.sqrt(x) 𝒳
math.fabs(x) |𝒳|
math.degrees(x) radians → degrees
math.radians(x) degrees → radians

 

반응형