프로그래밍 언어/파이썬

모듈과 패키지

dongok218 2024. 9. 11. 19:53

 

우리는 윈도우나 맥에서 수많은 파일을 폴더로 구분해 보관한다. 파이썬에서 코드가 만약 수백 수천 줄이라고 생각해보자. 코드가 길어지면 코드의 흐름이 헷갈려서 점점 이해하기 어려워진다. 이때 코드의 구조적 분리와 재사용성을 위해 모듈로 분리할 수 있다.

 

또한 다른 개발자가 이런 모듈의 구조화된 패키지로 제고앻 우리는 쉽게 사용할 수 있다.

 

●모듈

import 호출할 모듈

form 호출할 모듈 import 가져올 변수 또는 함수

 

  • 새로운 모듈 만들기

기존 모듈에서 제공하지 않거나 새로이 필요한 모듈을 필요에 따라 만들 수 있어야 한다.

import sys

import time

 

 

def delay_print(s):

for c in s:

sys.stdout.write(c)

sys.stdout.flush()

time.sleep(0.03)

 

 

if __name__ == "__main__":

hello_msg = "몬스터 리그에 오신 것을 환영합니다."

delay_print(hello_msg)

 

sys.stdout.write함수를 통해 문자열을 출력한다. 문자열 s를 받아서 한 글자씩 변수 c를 통해 출력된다. 파이썬에서는 출력 전 잠시 기다리는 버퍼링이 존재하는데 sys.stdout.flush() 함수는 터미널에 문자를 바로 출력한다. time.sleep() 함수는 일정 시간 동안 기다린다. 터미널에 출력될 때 한 번에 한 글자씩 빠르게 입력되는 듯한 효과처럼 출력된다.

이처럼 함수를 만들어서 사용할 수 있지만 이 함수는 코드의 다른 곳에서 호출될 일이 많다. 따라서 모듈로 분리해보자.

 

모듈을 만들기 위해 프로젝트 최상단에 utils 디렉터리를 생성해 준다. 그리고 디렉터리 안에 __init__py의 소스 코드 내용은 비워 둔 채로 빈 파일을 일단 생성한다. 생성한 utils 디렉터리에 display.py 파일을 생성하고 기존의 delay_print 함수를 옮겨보자.

 

 
사진 삭제

사진 설명을 입력하세요.

이런식으로 utils를 구성해주면 된다. 여기서 __init__.py파일은 하위 호완성과 __init__.py에서 선택적으로 모듈을 호출할 수 있으므로 명시적으로 작성해 주는것이 좋다.

 

import sys

 

sys.path.append("c:/Users/dongok/Documents/Python Hacking")

from utils.display import delay_print

 

print(f"3-29.py의 __name__:{__name__}")

if __name__ == "__main__":

print(__name__)

hello_msg = "몬스터 리그에 오신 것을 환영합니다."

delay_print(hello_msg)

[3-29.py]

 

이 코드에서 from utils.display import delay_print as dp라고 선언했다면 delay_print()함수는 dp()함수로 호출할 수도 있다.

 

파이썬의 __name__변수는 직접 실행했을 때 __main__이라는 값을 저장하며, 모듈로 실행되었을 때는 모듈의 이름을 출력한다. 따라서 우리가 작성하는 프로그램에서 if__name__=="__main__":구문은 직접 실행할 떄만 수행된다.

 

만약 display.py에서 실행했다면 "display.py의 __name__:__main__"라고 출력되었을 것이다.

 

'프로그래밍 언어 > 파이썬' 카테고리의 다른 글

__init.py__란?  (0) 2024.09.11
클래스와 인스턴스  (0) 2024.09.11
파이썬 예외처리  (0) 2024.09.11
if__name__=='__main__':  (0) 2024.09.11
파이썬 문법 지식  (0) 2024.09.11