[Python 기초] 파이썬 프로그래밍의 핵심 - 모듈(Module)
업데이트:
개요
모듈(module)이란?
모듈(module)이란 함수나 변수 또는 클래스 들을 모아 놓은 파일이다.
다른 파이썬 프로그램에서 불러와 사용할 수 있게끔 만들어진 파이썬 파일이라고도 할 수 있다.
앞서 포스팅 했던, 클래스(Class)는 함수나 변수들을 모아 놓을 수 있는 공간이라고 했었다.
모듈은 이들을 모두 포함 할 수 있는 상위의 개념이라고 생각하면 쉽다.
1. 모듈 만들고 불러보기
# mod1.py
def sum(a,b):
return a + b
간단히 sum
함수를 정의하고 이를 mod1.py
라는 파일명으로 저장했다.
이 mod1.py
가 바로 모듈이다.
import mod1
print(mod1.sum(3,4))
[Output] 7
모듈을 import
해서 불러오기 위해서는 작업공간이 mod1.py
모듈이 저장된 디렉토리로 이동해야 가능하다.
즉, import 모듈이름
은 현재 디렉터리에 있는 파일이나 파이썬 라이브러리가 저장된 디렉터리에 있는 모듈만 불러올 수 있다.
또한 mod1.py
의 sum
함수를 이용하기 위해서는 mod1.sum
의 형태로 도트연산자를 이용해야 한다.
# mod1.py에 함수 추가
def safe_sum(a,b):
if type(a) != type(b):
print("더할수 있는 것이 아닙니다.")
return
else:
result = sum(a,b)
return result
mod1.py
파일에 함수를 추가해 보았다.
else
문에 sum
함수가 들어가게 만들어서 자료형(type)이 같을 경우 실행되게 하는 재귀호출 함수의 형태라고 볼 수 있다.
import mod1
모듈 불러오기
print(mod1.safe_sum(3,4))
print(mod1.safe_sum(1,'a'))
[Output]
7
더할수 있는 것이 아닙니다.
None
실행결과 None
이 나오는 이유는 if문에 단독으로 사용된 return에 의해 반환된 것이다.
2. 모듈을 불러오는 다양한 방법
2-1. 해당 모듈의 함수자체를 불러오기
때로는 mod1.sum
보다 바로 sum
함수로 간편하게 사용하고 싶을 수 있다.
이럴때는 모듈을 불러올때
from 모듈이름 import 모듈함수
위와 같이 불러오면 된다.
from mod1 import sum
sum(3,4)
[Output] 7
이와 같이 mod1.py
모듈에서 sum
함수만 불러와 사용한 경우이다.
2-2. 해당 모듈의 여러 함수를 불러오기
여러 함수를 불러오고 싶을때는 단지 ,
로 여러 함수를 입력해 주면 된다.
from mod1 import sum, safe_sum
safe_sum(1,'아')
[Output] 더할수 있는 것이 아닙니다.
2-3. 해당 모듈의 모든 함수를 불러오기
from mod1 import *
위와 같이 *
를 입력하면 해당 모듈의 모든 함수를 import
할 수 있다.
참고로 *
는 ‘모든 것’이라는 의미로 나중에 포스팅 정규표현식 중 하나이다.
3. if __name__
== “__main__
”: 의 의미
# mod1.py에 추가
print(safe_sum('a',1))
print(safe_sum(1,4))
print(sum(10,10.4))
mod1.py
파일의 마지막에 위와 같이 추가해보자.
그 후 커맨드창에서 모듈을 실행해 보자.
실행해보면 마지막에 추가했던 print
로 출력된 것을 볼 수 있다.
그런데 대화형 인터프리터에서 mod1.py
모듈을 사용하려고 import
했을때 문제가 발생한다.
위와 같이 mod1.py
모듈을 불러와 함수를 사용하려고 했을 뿐인데 자동으로 실행되어 결과값을 출력해버린다.
이럴때 마지막 부분을 다음과 같이 수정해보자.
if `__name__` == "`__main__`":
print(safe_sum('a',1))
print(safe_sum(1,4))
print(sum(10,10.4))
그러면 파일을 직접 실행시켰을때는 __name__
== “__main__
“이 참이 되어 if문 다음 문장(print
)들을 수행한다. 하지만 대화형 인터프리터나 다른 파일에서 모듈을 import
해 사용할때는 위 조건문이 거짓이되어 수행하지 않게 된다.
위와 같이 말이다!
4. 클래스나 변수 등을 포함한 모듈
이번엔 함수 뿐아니라 클래스와 변수를 포함한 모듈을 만들어보자.
# mod2.py
PI = 3.141592
class Math:
def solv(self, r):
return PI * (r**2)
def sum(self,a,b):
return a + b
if __name__ == "__main__":
print(PI)
a = Math()
print(a.solv(2))
print(a.sum(PI,4.4))
이 파일은 반지름을 계산하는 Math
클래스와 두 값을 더하는 sum
함수, 그리고 원주율 값인 PI
변수를 포함하고 있다.
먼저 이 mod2.py
를 직접 실행해보자.
그러면 __name__
== “__main__
“이 참이 되어 마지막 부분들을 수행한다.
이제 대화형 인터프리터에서 모듈을 import
해서 모듈 내에 포함된 것들을 사용해보자.
모듈 불러오기
import mod2
모듈 내 변수 불러오기
mod2.PI
[Output] 3.141592
클래스를 이용해 함수 사용하기
a = mod2.Math()
print(a.solv(2))
print(a.sum(mod2.PI,4.4))
[Output]
12.566368
7.5415920000000005
객체에 인스턴스 부여
solv
함수 사용하기
sum
함수로 원주율과 4.4 더하기
클래스 내의 함수들을 사용하는 과정이 잘 기억이 나지 않는다면 클래스(class)포스팅을 참고하자.
5. 모듈이 있는 디렉토리로 이동하지 않고 사용하는 방법
5-1. sys.path.append(모듈을 저장한 디렉터리) 사용하기
우선 mod2.py모듈을 해당 작업공간이 아닌 D:\Python에 옮겨놓자.
그러면 당연히 모듈을 import
하는 것은 불가능하다.
sys
모듈은 파이썬을 설치할 때 함께 설치되는 라이브러리로, 이를 이용해 파이썬 라이브러리가 설치되어 있는 디렉터리를 확인할 수 있다.
import sys
sys.path
[Output]
['',
'D:\\Anaconda3\\python36.zip',
'D:\\Anaconda3\\DLLs',
'D:\\Anaconda3\\lib',
'D:\\Anaconda3',
'D:\\Anaconda3\\lib\\site-packages',
'D:\\Anaconda3\\lib\\site-packages\\win32',
'D:\\Anaconda3\\lib\\site-packages\\win32\\lib',
'D:\\Anaconda3\\lib\\site-packages\\Pythonwin',
'D:\\Anaconda3\\lib\\site-packages\\IPython\\extensions',
'C:\\Users\\user\\.ipython']
즉, 어떤 모듈이 이 경로안에 포함되어 있다면 디렉터리의 이동 없이 해당 모듈을 사용할 수 있다.
sys.path.append("D:\Python")
sys.path
의 결과값이 리스트 자료형이므로 append
함수를 이용해 경로를 추가해주면 된다.
append
함수는 리스트 자료형 포스팅의 리스트 관련함수에서 언급했던 적이 있다.
sys.path
[Output]
['',
'D:\\Anaconda3\\python36.zip',
'D:\\Anaconda3\\DLLs',
'D:\\Anaconda3\\lib',
'D:\\Anaconda3',
'D:\\Anaconda3\\lib\\site-packages',
'D:\\Anaconda3\\lib\\site-packages\\win32',
'D:\\Anaconda3\\lib\\site-packages\\win32\\lib',
'D:\\Anaconda3\\lib\\site-packages\\Pythonwin',
'D:\\Anaconda3\\lib\\site-packages\\IPython\\extensions',
'C:\\Users\\user\\.ipython',
'D:\\Python']
경로가 마지막에 추가되었음을 확인할 수 있다!
import mod2
그 후에는 mod2.py
모듈이 현재 작업공간과 다른 D:\\python
경로에 있지만 import
해서 사용이 가능하다.
5-2. PYTHONPATH 환경 변수 이용하기
비슷한 방법으로 커맨드 창에 set PYTHONPATH=D:\\Python
을 입력해 새로운 디렉터리를 설정해 주면, 별도의 작업 필요 없이 mod2.py
모듈을 이용 할 수 있다.
Reference
도서 [점프 투 파이썬] 를 공부하며 작성하였습니다.
댓글남기기