본문 바로가기

교육 노트/파이썬 강의

[파이썬 때려잡기] Python 강의 19 - 모듈

2018/09/04 - [교육 노트/파이썬 강의] - [파이썬 때려잡기] Python 강의 1 - Hello World!

2018/09/04 - [교육 노트/파이썬 강의] - [파이썬 때려잡기] Python 강의 2 - 변수와 자료형, 연산자

2018/09/05 - [교육 노트/파이썬 강의] - [파이썬 때려잡기] Python 강의 3 - 파이썬의 자료구조, 리스트 (list)

2018/09/05 - [교육 노트/파이썬 강의] - [파이썬 때려잡기] Python 강의 4 - 파이썬의 스트링 (string)

2018/09/05 - [교육 노트/파이썬 강의] - [파이썬 때려잡기] Python 강의 5 - 스트링과 리스트 처리-1

2018/09/05 - [교육 노트/파이썬 강의] - [파이썬 때려잡기] Python 강의 6 - 스트링과 리스트 처리-2

2018/09/05 - [교육 노트/파이썬 강의] - [파이썬 때려잡기] Python 강의 7 - 튜플 (tuple)

2018/09/05 - [교육 노트/파이썬 강의] - [파이썬 때려잡기] Python 강의 8 - 딕셔너리 (Dictionary)

2018/09/08 - [교육 노트/파이썬 강의] - [파이썬 때려잡기] Python 강의 9 - 집합 (set)

2018/09/08 - [교육 노트/파이썬 강의] - [파이썬 때려잡기] Python 강의 10 - 사용자 입출력

2018/09/09 - [교육 노트/파이썬 강의] - [파이썬 때려잡기] Python 강의 11 - 변수와 메모리

2018/09/09 - [교육 노트/파이썬 강의] - [파이썬 때려잡기] Python 강의 12 - 조건과 조건문(분기문)

2018/09/09 - [교육 노트/파이썬 강의] - [파이썬 때려잡기] Python 강의 13 - 반복문 while문

2018/09/10 - [교육 노트/파이썬 강의] - [파이썬 때려잡기] Python 강의 14 - 반복문 for문

2018/09/12 - [교육 노트/파이썬 강의] - [파이썬 때려잡기] Python 강의 15 - 함수와 프로시져

2018/09/14 - [교육 노트/파이썬 강의] - [파이썬 때려잡기] Python 강의 16 - 함수 - 디폴트 및 키워드 인수

2018/09/14 - [교육 노트/파이썬 강의] - [파이썬 때려잡기] Python 강의 17 - 함수 - 전역변수, 지역변수

2018/09/14 - [교육 노트/파이썬 강의] - [파이썬 때려잡기] Python 강의 18 - 함수 인자 변경


우리가 유용한 기능을 함수로 묶는것처럼 파이썬 개발자들도 유용한 기능을 묶어 이미 각종 함수를 만들어 두었다.

abs() len() 과 같은 내장 함수들이 그 예시이다. 내장함수의 경우 그냥 바로 파이썬에서 사용가능하지만

우리가 만든 함수들을 다른 파이썬 파일에서 사용하려면 어떻게 해야할까


1. import

import는 다른 *.py에 있는 함수들을 사용할때 그 다른 *.py를 포함시키는 것을 의미한다.

예를 들어 내가 게임을 만들기위한 함수들을 묶어 mygamemodule.py에 몰아서 작성했다고 하면

mygamemodule.py은 모듈이며

해당 모듈을 사용하기 위한 파이썬 코드에서 import mygamemodule 와 같이 사용한다.

#mygamemodule.py

def printUserMessage(username = "일반사용자",message = "안녕하세요"):
print(username +"님 " + message)

def attack(enemy):
#내용

def obtainItem(item):
#내용

모듈 내용

#mygame.py
import mygamemodule
mygamemodule.printUserMessage()

모듈 사용시


이런식으로 import 모듈

모듈명.함수 .. 과 같이 사용한다.



2. from

모듈명.함수에서 모듈명을 써주기 너무 귀찮다.

#mygame.py
from mygamemodule import printUserMessage
printUserMessage()

다음과 같이 모듈에서 함수만 빼와서 사용할수있다.

이런경우 printUserMessage함수만 빼온것이다.


#mygame.py
from mygamemodule import *
printUserMessage()
attack()
obtainItem()

*을 사용하면 모듈의 모든 함수를 전부 불러온것이다.




3. 모듈의 이름 __name__

#mygame.py
import mygamemodule

print (mygamemodule.__name__)


mygamemodule

다음과 같이 __name__를 통하여 모듈의 이름을 확인할수있다.

아니 모듈가져온게 모듈이름이지 이걸 왜 확인하느냐 하면...

#mygamemodule.py

def printUserMessage(username = "일반사용자",message = "안녕하세요"):
print(username +"님 " + message)

def attack(enemy):
#내용
pass

def obtainItem(item):
#내용
pass


print(__name__)

과 같이 마지막에 __name__을 출력하고 이 모듈 자체를 실행시켜보면

__main__

과 같이 뜬다

그럼 print(__name__) 이 추가된 모듈을 import 해보자

#mygame.py
import mygamemodule


mygamemodule

다음과 같이 mygame.py에서  mygamemodule의 print(__name__) 이 실행되어 mygamemodule 가 출력되었다.


1. 즉 모듈에 있는 내용도 import하면 실행이 된다

2. 모듈자체를 실행하면 __name__ 이 __main__ 이고 import로 하면 모듈의 이름이 뜬다.


위와 같은 특징을 이용하여

모듈을 임포트 했을때에는 모듈의 내용이 실행되지 않도록하고 (거기에 있는 함수나 전역변수만 사용하기위해서)

모듈로 사용하지 않았을때는 그 자체로 파이썬 프로그램으로 실행도 되게 할수있다.


#mygamemodule.py

def printUserMessage(username = "일반사용자",message = "안녕하세요"):
print(username +"님 " + message)

def attack(enemy):
#내용
pass

def obtainItem(item):
#내용
pass


if __name__ == "__main__":
print ("실행!")


#mygame.py
import mygamemodule

과 같이 파이썬 코드에 __name__ 이 __main__인지 검사하는 if문을 만들고 해당 if문 블록에서 프로그램을 작성하면

이를 모듈로사용 할수도 있고 파이썬 프로그램 자체로 사용하게 할수도 있다.



주로 편의를 위하여

def main():
#내용
pass

if __name__ == "__main__":
main()

다음과 같이 별도의 main함수를 정의하여 사용한다.


728x90