import math as m
print(m.ceil(3.3))
print(m.floor(3.3))
표준 모듈
모듈은 여러 변수와 함수를 가지고 있는 집합체로, 크게 표준모듈과 외부모듈로 구분된다.
파이썬은 모듈을 활용해 코드를 분리하고 공유하며, 파이썬에 기본적으로 내장된 모듈을 '표준모듈', 다른사람들이 만들어 공개한 모듈을 '외부모듈'이라고 부른다.
일반적으로 모듈을 가져올 때 import 구문을 사용하며 import 구문은 코드의 가장 위에 작성한다.
import 모듈 이름
math 모듈을 예시로 구문을 살펴보자.
변수 또는 함수 | 설명 |
sin(x) | 사인 값을 구한다. |
cos(x) | 코사인 값을 구한다. |
tan(x) | 탄젠트 값을 구한다. |
log(x[,base]) | 로그 값을 구한다. |
ceil(x) | 올림한다. |
floor(x) | 내림한다. |
import math
print(math.ceil(3.3))
print(math.floor(3.3))
from 구문
모듈 안에는 다양한 변수와 함수가 들어있다.
하지만 그 중에서 우리가 활용하고 싶은 기능이 극히 일부인 경우, 위 예제와 같이 math.ceil() / math.floor() 앞에 모듈이름을 계속 입력하는 것이 번거로울 수 있다.
이러한 때 from 구문을 활용할 수 있다.
from 모듈 이름 import 가져오고 싶은 변수 또는 함수
from math import ceil, floor
print(ceil(3.3))
print(floor(3.3))
만약 앞에 모듈 이름을 붙이는 것이 싫고 모든 기능을 가져오는 것이 목적이라면 * 기호를 사용한다.
from 모듈 이름 import *
다만 모든것을 가져오면 식별자 이름에서 충돌이 발생할 수 있기 대문에 from 구문을 사용할 때는 최대한 필요한 것들만 가져와서 사용하는 것이 좋다.
as 구문
모듈을 가져올 때 이름 충돌이 발생하거나, 모듈의 이름이 너무 길어 짧게 줄여 사용하고 싶은 경우가 있을 수 있다.
이런 경우에 아래와 같이 as 구문을 사용한다.
import 모듈 이름 as 사용하고싶은 식별자
import math as m
print(m.ceil(3.3))
print(m.floor(3.3))
자주 사용하는 모듈
모듈 이름 | 설명 |
random | 랜덤한 값을 생성할 때 사용하는 모듈 |
sys | 시스템과 관련된 정보를 가지고 있는 모듈 (명령 매개변수를 받을 때 많이 사용) |
os | 운영체제와 관련된 기능을 가지고 있는 모듈 (새로운 폴더를 만들거나, 폴더 내부의 파일 목록을 찾을 때 많이 사용) |
datetime | date(날짜), time(시간)과 관련된 모듈 |
time | 시간과 관련된 기능을 다루는 모듈 |
urllib | URL을 다루는 라이브러리, 즉 인터넷 주소를 활용할 때 사용하는 모듈 (네트워크의 자원이 어디에 위치하는지 확인할 때 사용) |
모듈 만들기
모듈을 만들기 위해서는, 파이썬 파일을 만들고 이를 외부에서 읽어들이면 모듈이 된다.
우선 아래와 같이 변수와 함수를 선언한 test_module.py 파일을 만들어준다.
PI = 3.141592
def number_input():
output = input("숫자입력>")
return float(output)
def get_circumference(raidus):
return 2 * PI * raidus
def get_circle_area(radius):
return PI * radius * radius
그리고 동일한 폴더 안에 아래와 같이 main.py 파일을 생성한 후 test_module.py 파일을 import 한다.
import test_module as test
radius = test.number_input()
print(test.get_circumference(radius))
print(test.get_circle_area(radius))
이처럼 필요한 코드를 파이썬 파일로 저장하고 외부에서 import 하여 모듈로 사용할 수 있다.
__name__ == "__main__"
다른 사람들이 만드는 파이썬 코드들을 보다보면 __name__ == "__main__" 이라는 코드를 자주 볼 수 있다.
__name__ : 프로그래밍 언어에서 프로그램의 진입점을 엔트리 포인트(Entry Point) 혹은 메인(Main)이라고 부르며,
엔트리 포인트/메인 내부에서의 __name__은 "__main__"이다.
모듈의 __name__ :
기존의 main, test_module.py 를 아래와 같이 각각 수정하여 __name__을 출력해보자.
print("모듈의 __name__ :")
print(__name__)
import test_module as test
print("메인의 __name__ :")
print(__name__)
모듈의 __name__을 출력하면 test_module(모듈 파일의 이름)이 출력되고,
메인의 __name__을 출력하면 __name__이 출력되게 된다.
__name__ 활용하기 :
엔트리 포인트 파일 내부에서는 __name__이 "__main__"이라는 값을 갖는다.
이를 활용하면 현재 파일이 모듈로 실행되고 있는지, 엔트리 포인트로 실행되고 있는지를 확인할 수 있다.
위의 예제를 다시 가져와서, 현재 파일이 엔트리 포인트인지 확인하고 엔트리 포인트일때는 추가 구문을 실행하도록 작성해보자.
PI = 3.141592
def number_input():
output = input("숫자입력>")
return float(output)
def get_circumference(raidus):
return 2*PI*raidus
def get_circle_area(radius):
return PI * radius
if __name__ == "__main__" :
print("get_circumfereence(10): ", get_circumference(10))
print("get_circle_area(10): ", get_circle_area(10))
import test_module as test
radius = test.number_input()
print(test.get_circumference(radius))
print(test.get_circle_area(radius))
패키지
패키지를 만들기 위해서 우선 module_package라는 폴더를 만들고, 그 안에 main.py 파일을 생성한다.
그리고 module_package 폴더 안에 test_package 폴더를 만들고, 그 안에 module_a, module_b.py 파일을 생성한다.
#module_a.py
variabe_a = "a 모듈의 변수"
#module_b.py
variabe_b = "b 모듈의 변수"
import test_package.module_a as a
import test_package.module_b as b
print(a.variabe_a)
print(b.variabe_b)
이처럼 복잡하고 구조화된 모듈을 만들 때는 패키지(package) 기능을 사용하게 된다.
__init__.py 파일
패키지를 읽을 때 어떤 처리를 수행해야하거나, 패키지 내부의 모듈을 한꺼번에 가져오고 싶을 때 패키지 폴더 내부에 __init__.py 파일을 만들어 사용한다.
__init__.py는 해당 폴더가 패키지임을 알려주고, 패키지와 관련된 초기화 처리를 하는 파일이다.
#__init__.py
# "from test_package import *"로 모듈을 읽어들일 때 가져올 모듈
__all__ = ["module_a", "module_b"] #사용 시 읽어들일 모듈의 목록
print("test_package를 가져왔습니다.")
from test_package import *
print(module_a.variabe_a)
print(module_b.variabe_b)
'Spec UP - Backend > 혼자 공부하는 파이썬' 카테고리의 다른 글
chap_08. 클래스 (1) | 2024.01.09 |
---|---|
chap_06-1. 구문오류와 예외 (0) | 2023.12.12 |
chap_05-3. 함수 고급 (0) | 2023.11.13 |
chap_05-2. 함수의 활용 (0) | 2023.11.13 |
chapter_05-1. 함수 만들기 (0) | 2023.10.27 |
댓글