목차
- 모듈(Module)이란?
- 모듈 생성 및 불러오기
- 모듈 함수를 사용하는 다른 방법
- 모듈 이름 재명명(Re-naming )하기
- if __name__ == "__main__":의 의미
- 클래스나 변수를 포함한 모듈
- 새 파일에 만들어둔 모듈 불러오기
- 내장된 모듈
- dir() 함수 사용하기
파이썬 모듈
1. 모듈(Module)이란?
모듈(Module)이란 함수나 변수 또는 클래스를 모아 놓은 파일을 말한다. 또한 다른 파이썬 프로그램에서 불러와 사용할 수 있게끔 만든 '파이썬 파일'이라고도 할 수 있다. 예를 들어 앞서 배웠던 클래스는 상속을 통해 다양한 속성과 함수를 사용할 수 있었다. 하지만 클래스의 상속은 유사한 성격을 가진 클래스들에게만 유용한 방법이고, 여러 가지 상황에 사용할 수 있는 범용성은 떨어지는 편이다. 그래서 자주 사용하는 함수들을 따로 관리하다가 필요한 곳에 재사용할 수 있는 방법이 있으면 편리한데 이런 방법에 모듈을 사용하면 편리하다.
앞으로 파이썬으로 다양한 프로그래밍 작업을 할 때 굉장히 많은 모듈을 사용하게 될 것이다. 당연히 다른 사람들이 이미 만들어둔 모듈을 사용할 수 있고, 직접 만들어서 사용할 수도 있다.
2. 모듈 생성 및 불러오기
모듈의 생성은 의외로 간단하다. 원하는 코드를 작성한 후 확장명을 .py로 저장하면 된다. 일단 간단한 모듈을 먼저 만들고 mod1.py라는 이름의 파일을 저장하자. (필자의 경우 Mac OS기준 Documents에 저장)
# mod1.py
def sum(a, b):
return a + b <---- 기본 더하기 연산자
def safe_sum(a, b):
if type(a) != type(b): <---- 객체 a와 b의 자료형이 다르면
print("더할 수 있는 것이 아닙니다.") <---- 메시지 출력
return
else: <---- 객체 a와 b의 자료형이 같다면
result = sum(a, b) <---- a와 b를 더해라
return result
그리고 아래와 같이 터미널 창을 열고 모듈로 사용할 파일이 저장된 위치로 이동한 후 해당 위치에서 python을 실행한다.
Documents HenryKim$ python3
Python 3.6.4 (v3.6.4:d48ecebad5, Dec 18 2017, 21:07:28)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
이제 mod1.py 파일을 풀러오기 위해 import를 사용해 mod1을 불러오고 모듈에 저장된 sum(a, b)함수를 사용해 특정 숫자를 더해보자. 그리고 safe_sum(a, b)함수 역시 사용해 보자. 아래와 같은 결과를 얻을 수 있을 것이다.
이때 사용한 import는 만들어진 파이썬 모듈을 사용할 수 있게 해주는 명령어로 사용 방법은 'import 모듈이름'을 입력하면 된다.
>>> import mod1
>>> mod1.sum(3, 4)
7
>>> mod1.safe_sum(3, 'b')
더할 수 있는 것이 아닙니다.
>>> mod1.safe_sum(5, 10)
15
>>>
이제는 위와 같이 간단한 소스코드는 어떻게 해서 저런 결과값이 나왔는지 이해할 수 있을 것이다. 위 방법은 가장 기본적으로 모듈을 저장하고 사용하는 방법이다.
3. 모듈 함수를 사용하는 다른 방법
이때 모듈 함수를 사용하는 다른 방법이 있다. 위에서 사용한 방법과 같이 mod1.safe_sum(a, b)처럼 쓰지 않고 그냥 sum(a, b), safe_sum(a, b)와 같이 함수를 쓸 수 있는 방법이 있다. 바로 아래와 같이 'from 모듈이름 import 모듈함수'를 사용하면 된다.
# sum 함수모듈 한 가지만 가지고 올 때
>>> from mod1 import sum
>>> sum(3, 4)
7
# sum과 safe_sum 함수모듈 두 가지를 가지고 올 때
>>> from mod1 import sum, safe_sum
>>> safe_sum(3, 5)
8
# mod1 모듈에 포함된 모든 함수를 가지고 올 때
>>> from mod1 import *
>>> sum(3, 4)
7
>>> safe_sum(5, 1)
6
첫 번째와 두 번째와 같이 특정 모듈이 이름을 알거나 가지고 올 때 위와 같은 방법을 사용하면 되고, 함수 모듈의 이름을 모르거나 모듈에 포함된 모든 함수 모듈을 가지고 올 때 import뒤에 별(*)문자를 사용하면 된다. 이 방법은 사용하고자 하는 모듈이 엄청 클 때 전체를 가져오는데 필요한 메모리와 시간적으로 부담이 될 수 있는 부분을 특정 모듈만 가져옴으로써 어느 정도 줄여줄 수 있다.
4. 모듈 이름 재명명(Re-naming )하기
만약 사용하고자 하는 모듈의 이름이 길거나 다르게 부르고 싶을 때 모듈의 이름을 잠시나마 짧고 간편하게 부를 수 있는 방법이 있다.
>>> import mod1 as md
>>> md.sum(3, 4)
7
바로 위와 같이 as를 사용하는 방법이다. 쉽게 말하면 'mode1 이라는 이름을 가진 모듈을 불러오고, 이 모듈의 이름을 당분간 md로 부르겠다.'는 뜻이 된다.
5. if __name__ == "__main__":의 의미
아래와 같이 모듈의 끝에 추가를 한다면 해당 모듈을 import 하면 자동으로 결과값(print)이 출력된다.
# mod1.py
def sum(a, b):
return a + b
def safe_sum(a, b):
if type(a) != type(b):
print("더할 수 있는 것이 아닙니다.")
return
else:
result = sum(a, b)
return result
print(safe_sum('a', 1))
print(sum(10, 10))
>>> import mod1
더할 수 있는 것이 아닙니다.
None
20
이러한 문제를 방지하기 위한 방법으로 if __name__ == "__main__":의 사용이 있다.
# mod1.py
def sum(a, b):
return a + b
def safe_sum(a, b):
if type(a) != type(b):
print("더할 수 있는 것이 아닙니다.")
return
else:
result = sum(a, b)
return result
if __name__ == "__main__":
print(safe_sum('a', 1))
print(sum(10, 10))
>>> import mod1
>>>
모듈의 마지막 부분에 if __name__ == "__main__":을 추가한 다음에는 모듈을 import해도 아무런 결과값 출력이 없는 것을 볼 수 있다. 단, if __name__ == "__main__": 입력 후 print의 들여쓰기를 기억하다.
6. 클래스나 변수를 포함한 모듈
지금까지 설명에는 모듈에 함수만 포함했지만 아래와 같이 클래스나 변수 역시 포함할 수 있다.
# mod2.py
PI = 3.141592
class Math:
def solv(self, r):
return PI * (r ** 2)
def sum(a, b):
return a + b
if __name__ == "__main__":
print(PI)
a = Math()
print(a.solv(2))
print(sum(PI, 4.4))
아래와 같이 mod2.py 파일 자체를 실행할 때는 결과값이 자동으로 출력된다. 하지만 기존과 같이 파이썬(대화형 인터프리터)를 열고 기존의 방식과 같이 모듈을 실행하면 아무런 결과값이 출력되지 않는다.
Documents HenryKim$ python mod2.py
3.141592
12.566368
7.541592
Documents HenryKim$ python3
Python 3.6.4 (v3.6.4:d48ecebad5, Dec 18 2017, 21:07:28)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import mod2
>>>
이렇게 import한 mod2 모듈에 포함된 변수, 클래스, 함수는 아래와 같이 사용할 수 있다.
>>> print(mod2.PI) <---- mod2 모듈에 있는 변수값 PI 출력
3.141592
>>> a = mod2.Math() <---- mod2 모듈에 있는 Math 클래스 사용
>>> print(a.solv(2))
12.566368
>>> print(mod2.sum(mod2.PI, 4.4)) <---- sum 함수 사용
7.5415920000000005
7. 새 파일에 만들어둔 모듈 불러오기
이번에는 새로 만들 파이썬 파일에 이전에 이미 만들어 놨던 모듈을 불러와서 아래와 같이 사용해 보자.
# modtest.py
import mod2
result = mod2.sum(3, 4)
print(result)
이렇게 새로 만드는 파이썬 파일에도 import를 사용해 mod2 모듈을 불러와 사용할 수 있다. 단, modtest.py와 mod2.py 파일이 동일한 디렉토리(경로)에 있어야 한다는 점을 주의하자.
8. 내장된 모듈
파이썬에는 내장 여러개의 모듈이 있다. 원하는 걸 import를 통해 사용하면 된다.
import platform
print(platform.system())
위와 같이 platform.system()를 사용하면 사용하는 컴퓨터의 플랫폼을 알려준다. 파이썬 라이브러리에 내장된 모듈에 대해 나오니 찾아보는 재미가 있을 것 같다.
9. dir() 함수 사용하기
dir함수를 사용하면 선택한 모듈 안에 사용할 수 있는 함수들과 변수들의 리스트를 보여준다.
# 플랫폼에서 사용 가능한 함수 리스트
>>> dir(platform)
['DEV_NULL', '_UNIXCONFDIR', '_WIN32_CLIENT_RELEASES', '_WIN32_SERVER_RELEASES',
'__builtins__', '__cached__', '__copyright__', '__doc__', '__file__', '__loader__',
'__name__', '__package__', '__spec__', '__version__', '_default_architecture',
'_dist_try_harder', '_follow_symlinks', '_ironpython26_sys_version_parser',
'_ironpython_sys_version_parser', '_java_getprop', '_libc_search',
'_linux_distribution', '_lsb_release_version', '_mac_ver_xml', '_node',
'_norm_version', '_parse_release_file', '_platform', '_platform_cache',
'_pypy_sys_version_parser', '_release_filename', '_release_version',
'_supported_dists', '_sys_version', '_sys_version_cache', '_sys_version_parser',
'_syscmd_file', '_syscmd_uname', '_syscmd_ver', '_uname_cache', '_ver_output',
'architecture', 'collections', 'dist', 'java_ver', 'libc_ver', 'linux_distribution',
'mac_ver', 'machine', 'node', 'os', 'platform', 'popen', 'processor', 'python_branch',
'python_build', 'python_compiler', 'python_implementation', 'python_revision',
'python_version', 'python_version_tuple', 're', 'release', 'subprocess', 'sys',
'system', 'system_alias', 'uname', 'uname_result', 'version', 'warnings', 'win32_ver']
# 미리 저장해둔 mod1 모듈에서 사용할 수 있는 함수 리스트
>>> dir(mod1)
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__',
'__package__', '__spec__', 'safe_sum', 'sum']
내용 출처: 책 '점프 투 파이썬'의 내용
'Programing > Python' 카테고리의 다른 글
[Python 입문] 17. 파이썬 오류와 예외처리 (1) (0) | 2020.03.29 |
---|---|
[Python 입문] 16. 파이썬 패키지 (0) | 2020.03.29 |
[Python 입문] 14. 파이썬 오버라이딩과 오버로딩 (0) | 2020.03.27 |
[Python 입문] 13. 파이썬 클래스 03 (0) | 2020.03.27 |
[Python 입문] 13. 파이썬 클래스 02 (0) | 2020.03.26 |