-
반응형
오랜만의 포스팅 입니다.
오늘 포스팅은 파이썬에서 모듈 만들기에 대한 내용입니다.
모듈이란 무엇일까요?
어렵게 생각하지 마시고 이전 포스팅의 예제 들에서 이미 사용해 봤고 만들어 봤습니다.
모듈은 변수, 함수, 클래스 등을 모아둔 파일(.py) 입니다.
이전 글들 예제에서 import sys 이렇게 import 를 사용하였었습니다.
파이썬에서는 이미 제공되어지는 모듈들이 많이 있습니다.
import 해서 불러오는 것이 모듈 또는 패키지 입니다.
여기서 잠깐! 패키지는 모듈의 모음입니다. 패키지는 모듈을 디렉토리 구조로 계층적으로 관리하는 것입니다.
모듈은 왜 만들까요?
반복적인 내용을 코딩 시 함수를 만들어서 코딩을 간편하게 만들 수 있습니다.
하지만 함수는 같은 프로그램 안에서 호출 할 수 있습니다.
다른 프로그램에서도 호출 할 수 있도록 만들기 위해 모듈을 생성합니다.
함수 하나 하나 파일로 만든다면 파일 수가 엄청 많아질 것입니다.
비슷한 개념의 함수들을 모아서 하나의 파일을 만들어 사용하는 것이 모듈입니다.
이제 까지는 파이썬에서 제공하는 모듈을 사용했는데 이제 모듈을 하나 만들어 보겠습니다.
아래 예제와 같이 파일을 작성하고 animal.py 라고 저장합니다.
### animal.py
name = "동물이름"
def dog(name):
print( "강아지 이름은 %s 입니다." % name )
def cat(name):
print("고양이 이름은 %s 입니다." % name )
def pet(name):
print("반려동물 이름은 %s 입니다." % name )
명령창을 열어서 파일을 저장한 폴더로 이동합니다.
아래와 같이 python 을 실행하여 파이썬 셀을 엽니다.
C:\py_test>python
Python 3.8.2 (tags/v3.8.2:7b3ab59, Feb 25 2020, 23:03:10) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import animal
>>> animal.dog( "멍멍이")
강아지 이름은 멍멍이 입니다.
>>> animal.pet("예삐")
반려동물 이름은 예삐 입니다.
파일명이 모듈명이 됩니다.
모듈의 함수를 호출하는 방법은 모듈명.함수명으로 호출합니다.
예를 들어 dog 함수를 호출하려면 animal.dog(인수 ) 로 호출합니다.
모듈 import 할 경우 사용할 함수만 호출하는 방법이 있습니다.
from animal import dog 하면 dog 함수만 호출하여 사용 할 수 있습니다.
만약 animal 모듈안에 많은 함수 또는 클래스가 있다면 모두를 import 하므로 사용 할 함수만 import 하여 사용하는 것이 프로그램을 좀더 가볍게 해 줄 것입니다.
아래 예제는 dog 함수만 import 하는 예제 입니다.
dog 만 import 할 경우 함수 호출시 그냥 함수명만 사용하면 됩니다.
import 하지 않은 cat() 함수를 호출해 보면 정의되지 않았다는 오류 메시지가 발생합니다.
C:\py_test>python
Python 3.8.2 (tags/v3.8.2:7b3ab59, Feb 25 2020, 23:03:10) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from animal import dog
>>> dog("pretty")
강아지 이름은 pretty 입니다.
>>>
>>> cat("pretty")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'cat' is not defined
여러 개의 함수를 import 할 경우는 콤마(,) 구분자를 사용합니다.
아래 예지는 dog 와 cat 함수 만 import 합니다.
pet() 함수를 호출 시 당연히 정의되지 않았다는 오류 메시지가 발생합니다.
>>> from animal import dog, cat
>>>
>>> cat("pretty")
고양이 이름은 pretty 입니다.
>>>
>>> dog("pretty")
강아지 이름은 pretty 입니다.
>>> pet("pretty")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'pet' is not defined
아래 예제는 animal 모듈 전체를 import 합니다. import animal 과 동일합니다.
>>> from animal import *
>>> pet("pretty")
반려동물 이름은 pretty 입니다.
>>> cat("pretty")
고양이 이름은 pretty 입니다.생성한 모듈 파일의 위치는 어디에 위치하나요?
앞에 예제는 일부러 IDLE 를 사용하지 않고 모듈 파일이 위치한 디렉토리로 이동하여 python을 호출 하였습니다.
이유는 파이썬이 모듈을 찾는 범위 때문 입니다.
파이썬에 모듈 파일을 찾는 범위는 현재 디렉토리, sys.path 디렉토리에서 찾습니다.
만약 특정 위치에 모듈 파일을 생성하고 사용하고 싶다면 sys.path 에 추가해 주면 됩니다.
sys.path 를 확인하는 방법입니다.
C:\py_test>python
Python 3.8.2 (tags/v3.8.2:7b3ab59, Feb 25 2020, 23:03:10) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import sys
>>> sys.path
['', 'C:\\Users\\users\\AppData\\Local\\Programs\\Python\\Python38\\python38.zip', 'C:\\Users\\users\\AppData\\Local\\Programs\\Python\\Python38\\DLLs', 'C:\\Users\\users\\AppData\\Local\\Programs\\Python\\Python38\\lib', 'C:\\Users\\users\\AppData\\Local\\Programs\\Python\\Python38', 'C:\\Users\\users\\AppData\\Local\\Programs\\Python\\Python38\\lib\\site-packages’]
모듈 파일을 작성하고 모듈 파일 안에서 테스트해 보고 싶어요?
모듈 파일은 함수 또는 클래스들로만 이루어 져서 직접 실행하면 호출해주는 코드가 없으므로 아무 동작도 안 합니다.
이때 사용 할 수 있는 방법입니다.
아래 예제 처럼 if __name__ == "__main__": 을 추가하고 아래 테스트 코드를 작성하면 됩니다.
이 코드는 import 시에는 동작하시 않으면 단독으로 수행시에 동작합니다.
프로그램 작성 예
### animal.py
name = "동물이름"
def dog(name):
print( "강아지 이름은 %s 입니다." % name )
def cat(name):
print("고양이 이름은 %s 입니다." % name )
def pet(name):
print("반려동물 이름은 %s 입니다." % name )
if __name__ == "__main__":
dog("pretty")
cat("pretty")
pet("preytty")
if __name … 울 추가 전 실행
C:\py_test>python animal.py
if __name …. 을 추가 후 실행
C:\py_test>python animal.py
강아지 이름은 pretty 입니다.
고양이 이름은 pretty 입니다.
반려동물 이름은 pretty 입니다.
다시 import 하여 사용해 봅니다. 마지막에 추가한 테스트 코드는 수행하지 않습니다.
C:\py_test>python
Python 3.8.2 (tags/v3.8.2:7b3ab59, Feb 25 2020, 23:03:10) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import animal
>>> animal.dog("pretty")
강아지 이름은 pretty 입니다.
>>>
프로그램 작성시 하나의 파일에 너무 길게 코딩하는것 보다는 모듈화하여 개발하는 것이 훨씬 효과적입니다.
이상으로 모듈에 대한 포스팅을 마칩니다.
반응형'IT 이야기 공간 > 프로그램 언어' 카테고리의 다른 글
파이썬(python) 오류 예외 발생시키기( except, raise, pass ) (0) 2020.07.30 파이썬(python) 오류 예외 처리(try, except, finally) (0) 2020.07.29 파이썬(Python) 파일 입출력 #4 쓰기 (0) 2020.07.07 파이썬(Python) 파일 입출력 #3 한줄씩 읽기 (0) 2020.07.06 파이썬(Python) 파일 입출력 #2 읽기 (2) 2020.07.05