1-8-3. 모듈생성
모듈생성 방법
module1이라는 모듈생성
디렉터리(폴더)를 만들고
main.py와 test_module.py를 만들어서 저장합니다.
# test_moudle.py PI = 3.14 def number_input(): """ radius를 입력받을 함수입니다. """ output = input("숫자를 입력해주세요") return float(output) def get_circumference(radius): return 2 * PI * radius def get_circle_area(radius): return PI * radius * radius
import test_moudle as test radius = test.number_input() print(test.get_circumference(radius)) print(test.get_circle_area(radius))
__name__ == “__main__”
위 코드의 의미
__name__
프로그래밍 언어에서는 프로그램의 진입점을
entry point(엔트리 포인트) 혹은 main(메인) 이라고 부릅니다.
그리고 엔트리 포인트 혹은 메인 내부에서의
__name__은 “”__main__”입니다.
모듈의 __name__
모듈 생성에서
엔트리 포인트가 아니지만
엔트리 포인트 파일 내에서 import 되었기 때문에
모듈 내 코드가 실행되게 됩니다.
모듈 내부에서 __name__을 출력하면 모듈의 이름을 나타내게 됩니다.
# main.py 파일 print("메인의 __name__ 확인") print(__name__) print()
__name__을 활용하기
현재 파일이 어떤 모듈로 실행되는지, 엔트리 포인트로 실행되는지 확인이 가능합니다.
# test_moudle PI = 3.14 def number_input(): """ radius를 입력받을 함수입니다. """ output = input("숫자를 입력해주세요") return float(output) def get_circumference(radius): return 2 * PI * radius def get_circle_area(radius): return PI * radius * radius if __name__ == "__main__": print("get_circumference(10):", get_circumference(10)) print("get_circle_area(10)", get_circle_area(10))
현재 파일이 엔트리 포인트인지 확인하고,
엔트리 포인트 일 때만 실행합니다.
자주 사용되는 코드입니다.
패키지
pip는 패키지 관리 시스템(Package Management System)이며
모듈이 모여서 구조를 이루면 패키지(Package)라고 부릅니다.
패키지 만들기
main.py는 엔트리 포인트로 사용할 파이썬 파일이고
test_package 폴더는 패키지로 사용할 폴더로
test_package 내부에는 module_a.py, module_b.py 파일을 생성합니다.
module_a.py
variable_a = "a 모듈의 변수"
module_b.py
variable_b = "b 모듈의 변수"
main.py
import test_package.module_a as a import test_package.module_b as b # 모듈 내부 변수 출력하기 print(a.variable_a) print(b.variable_b)
__init__.py 파일
패키지를 읽을 때 어떤 처리를 수행해야 하거나
패키지 내부의 모듈들을 한꺼번에 가져오고 싶을 때
패키지를 읽어 들일 때 __init__.py를 가장 먼저 실행시켜서
__init__.py 내부에 __all__이라는 리스트를 생성하여
from <패키지 이름> import *에서 전부 읽어들여집니다.
__init__.py
# 모듈을 읽어 들일 때 가져올 모듈 __all__ = ["moudule_a","moudule_b"] # 패키지를 읽어들였을 때 처리를 작성 가능합니다. print("test_package를 읽어들였습니다.")
main.py
# 패키지 내부 모듈을 모두 읽어들입니다. from test_package import * # 모듈 내부 변수 출력 print(module_a.variable_a) print(module_b.variable_b)
모듈생성 후 사용하는 방법
module_a
from test_package import module_a
module_b
from test_package import module_b