<개인공부>/[Python]

[python] 파이썬 모듈 만드는법, 사용법

BlockDMask 2021. 6. 14. 00:30
반응형

안녕하세요. BlockDMask입니다.
오늘은 파이썬 모듈에 대해서 알아보겠습니다.

<목차>
1. 파이썬 모듈이란?
2. 파이썬 모듈 직접 만들기
3. 파이썬 모듈 가지고 오는 5가지 방법

 

1. 파이썬의 모듈이란?


공식 도큐먼트에 있는 내용에 있는 것을 살펴보면 [공식문서]

"모듈이란 파이썬 정의와 문장들을 담고 있는 파일이다. 파일의 이름은 모듈 이름에 확장자. py를 붙인다."

라고 나와있습니다.

 

조금 더 풀어서 설명을 붙여보면

프로그램을 만들 때 유용한 함수, 클래스, 상수 등등 여러 것들을 이미 만들어 놓고 필요할 때마다 사용할 수 있도록 만들어 놓은 것을 모듈이라고 합니다.

예를 들어 팩토리얼 값을 구하는 함수가 있다고 가정해보겠습니다.

프로그램 a에서도 팩토리얼 값을 구하기 위해서 함수를 작성하고
프로그램 b에서도 팩토리얼 값을 구하기 위해서 함수를 작성하고
프로그램 c, d, e, f,....

이렇게 매번 함수를 정의하고 하는 것이 불편하고, 비효율적이기 때문에

팩토리얼 함수를 정의해놓은 파일을 따로 만들어서, 팩토리얼 함수가 필요할 때마다 그 파일에서 꺼내서 사용할 수 있도록 만든 파일을 
모듈이라고 부릅니다.

또한, 모듈에는  함수뿐만 아니라 클래스, 상수값 등등 여러 개를 다 정의해놓을 수 있습니다.

 

 

2. 파이썬 모듈 만들기


일단 모듈은 어떤 식으로 만드는지 모듈을 먼저 직접 만들어서 사용해 보겠습니다.
만드는 게 궁금하지 않고 모듈 사용하는 법이 궁금하다면 바로 3번으로 가시면 됩니다.

간단하게 프로젝트에 first.py 와 second.py을 만들어보겠습니다.

second.py 파일에 사용할 함수 몇 개를 선언해 보겠습니다.

# second.py 파일

def sayMyName():
    print("BlockDMask")


def addNumbers(*args):
    result = 0
    for val in args:
        result += val

    return result


def mulNumbers(*args):
    result = 1
    for val in args:
        result *= val

    return result

 

first.py 파일에서 second.py를 임포트 해서 함수를 사용해보겠습니다.

# first.py
import second  # second.py 모듈로 가지고오기

second.sayMyName()

result1 = second.addNumbers(1, 2, 3, 4, 5)
result2 = second.mulNumbers(1, 2, 3, 4, 5)

print(f"second.addNumbers(arr) : {result1}")
print(f"second.mulNumbers(arr) : {result2}")

이런 식으로 import second를 통해서 second.py 파일을 first.py 에서 사용할 것이라는 것을 선언합니다.
그다음  "second. 함수 이름"을 통해서 second.py 파일에 있는 유용한 함수를 호출해서 사용할 수 있습니다.

이렇게 파이썬에서는 손쉽게 다른 py 파일에 있는 것을 사용할 수 있습니다. 이때 "다른 py 파일"을 모듈이라고 부릅니다.

 

 

3. 파이썬에서 모듈 사용 5가지 방법


3-1) import 모듈

import 모듈 방법은 모듈 전체를 가지고 오며, 사용법은 "모듈 이름. 함수 이름" 이런 식으로 . 을 붙여서 사용하면 됩니다.
여기서는 파이썬 수학 관련 모듈인 math 모듈을 가지고 여러 함수들을 사용하면서 예제를 들어보겠습니다.

import math

# 최대 공약수
r1 = math.gcd(15, 27)
print(f"math.gcd(15, 27) : {r1}")

# 최소 공배수
r2 = math.lcm(15, 27)
print(f"math.lcm(15, 27) : {r2}")

# 제곱, 제곱근
r3 = math.pow(2, 10)
r4 = math.sqrt(100)
print(f"math.pow(2, 10) : {r3}")
print(f"math.sqrt(100) : {r4}")

이런식으로 import random으로 모듈을 가지고 오게 되면,  모듈 이름인 random에 점 . 을 붙여서 함수 이름을 호출할 수 있습니다.

 

 

3-2) import 모듈 as 별명

모듈 이름이 긴 경우에 별명을 지어서 사용할 수 있습니다.
"모듈. 함수 이름"으로 접근을 해야 하는 것 "별명. 함수 이름"으로 사용할 수 있게 됩니다.

import math as m

# 최대 공약수
r1 = m.gcd(15, 27)
print(f"m.gcd(15, 27) : {r1}")

# 최소 공배수
r2 = m.lcm(15, 27)
print(f"m.lcm(15, 27) : {r2}")

# 제곱, 제곱근
r3 = m.pow(2, 10)
r4 = m.sqrt(100)
print(f"m.pow(2, 10) : {r3}")
print(f"m.sqrt(100) : {r4}")

import math as m을 통해서 math라는 모듈 이름을 m이라고 별명을 지었습니다.
그러면 m.gcd 이런 식으로 함수에 접근이 가능합니다.

 

3-3) from 모듈 import *

from 모듈 import * 는 모듈 이름 없이 함수를 사용하고 싶을 때 사용합니다.
다 좋은데 많은 모듈을 사용하는 경우에 어디 출신 함수인지 헷갈릴 수 있습니다.

from math import *

# 최대 공약수
r1 = gcd(15, 27)
print(f"gcd(15, 27) : {r1}")

# 최소 공배수
r2 = lcm(15, 27)
print(f"lcm(15, 27) : {r2}")

# 제곱, 제곱근
r3 = pow(2, 10)
r4 = sqrt(100)
print(f"pow(2, 10) : {r3}")
print(f"sqrt(100) : {r4}")

이런 식으로 math 모듈의 함수를 모듈 이름이나 별명 없이 바로 함수 이름으로 접근할 수 있습니다.
앞서 이야기했지만 편리하고 좋지만 프로그램 크기가 점점 커지면 어떤 모듈의 함수인지 알 수 없는 단점이 생길 수 있습니다.

 

 

3-4) from 모듈 import 함수 이름, 클래스 이름

모듈에서 특정 함수나 클래스만 사용하고 싶을 때 사용하는 방법입니다.
여기서 import 하지 않은 함수, 클래스는 사용이 불가능합니다.

from math import gcd, lcm, pow

# 최대 공약수
r1 = gcd(15, 27)
print(f"gcd(15, 27) : {r1}")

# 최소 공배수
r2 = lcm(15, 27)
print(f"lcm(15, 27) : {r2}")

# 제곱, 제곱근
r3 = pow(2, 10)
# r4 = sqrt(100) : 사용불가 math.sqrt(x), sqrt(x)
print(f"pow(2, 10) : {r3}")
# print(f"sqrt(100) : {r4}")

from math import gcd, lcm, pow 일 때 각 함수들은 자유롭게 사용할 수 있지만
sqrt와 같이 math에 속해있지만 위에서 import에서 적어서 가지고 오지 않았기 때문에 math.sqrt, sqrt 둘 다 사용이 불가능한 것을 볼 수 있습니다.
즉, 사용할 함수들 gcd, lcm, pow 만 임포트 해오고 나머지는 가지고 오지 않는다고 생각하면 됩니다.

 

 

3-5) from 모듈 import 함수이름 as 별명

함수이름에 별명을 지어서 사용하는 것입니다.

from math import gcd as g, lcm as l, pow as p, sqrt as s

# 최대 공약수
r1 = g(15, 27)
print(f"g(15, 27) : {r1}")

# 최소 공배수
r2 = l(15, 27)
print(f"l(15, 27) : {r2}")

# 제곱, 제곱근
r3 = p(2, 10)
r4 = s(100)
print(f"p(2, 10) : {r3}")
print(f"s(100) : {r4}")

이런 식으로 각 함수마다 as 별명을 이용해서 별명을 지어주고 해당 별명으로 함수를 사용할 수 있는 방법입니다.

 

이렇게 파이썬 모듈에 대해서 알아보았습니다.
감사합니다.

반응형