Python에서 모듈은 코드를 논리적으로 구성하고 재사용 가능한 단위로 만드는 데 필수적인 요소입니다. 모듈은 클래스, 함수, 변수 등을 포함하는 `.py` 확장자를 가진 파일입니다.
모듈 가져오기
Python에서 모듈을 사용하려면 `import` 문을 사용해야 합니다. 여러 가지 방법으로 모듈을 가져올 수 있습니다.
1. 전체 모듈 가져오기
가장 기본적인 방법은 `import` 키워드를 사용하여 모듈 전체를 가져오는 것입니다. 이 경우 모듈 내의 요소에 접근하려면 `모듈명.요소명` 형식으로 사용해야 합니다.
import time
print("작업 시작")
time.sleep(5) # 5초 동안 실행을 일시 중지합니다.
print("작업 완료")
2. 특정 요소 가져오기
모듈에서 특정 함수나 클래스만 필요한 경우, `from ... import ...` 구문을 사용하여 해당 요소만 가져올 수 있습니다. 이렇게 하면 모듈 이름을 붙이지 않고 직접 요소 이름을 사용할 수 있습니다.
예를 들어, `bao` 패키지 내의 `x` 모듈에 있는 `hs` 함수를 가져온다고 가정해 보겠습니다.
x 모듈 (bao/x.py):
def greet_hello():
print("안녕하세요!")
def show_message():
print("이것은 메시지입니다.")
y 모듈 (bao/y.py):
from bao.x import greet_hello
greet_hello()
3. 모든 요소 가져오기 (권장하지 않음)
`from ... import *` 구문을 사용하면 모듈의 모든 요소를 현재 네임스페이스로 가져올 수 있습니다. 하지만 이 방법은 이름 충돌의 위험이 있고 코드의 가독성을 해칠 수 있으므로 일반적으로 권장되지 않습니다.
x 모듈 (bao/x.py):
def greet_hello():
print("안녕하세요!")
def show_message():
print("이것은 메시지입니다.")
y 모듈 (bao/y.py):
from bao.x import *
greet_hello()
show_message()
4. 별칭(Alias) 사용하기
모듈이나 특정 요소를 가져올 때 `as` 키워드를 사용하여 별칭을 지정할 수 있습니다. 이는 긴 모듈 이름을 짧게 줄이거나 이름 충돌을 피하는 데 유용합니다.
x 모듈 (bao/x.py):
def greet_hello():
print("안녕하세요!")
def show_message():
print("이것은 메시지입니다.")
y 모듈 (bao/y.py):
from bao.x import greet_hello as hello
hello()
자주 사용되는 내장 모듈
1. time 모듈
time 모듈은 시간 관련 기능을 제공합니다.
import time
# 1970년 1월 1일 0시 0분 0초 UTC 이후 경과된 시간을 초 단위로 반환합니다.
print(f"현재 타임스탬프: {time.time()}")
time.sleep(2) # 2초 동안 프로그램 실행을 일시 중지합니다.
# 현재 시간을 사람이 읽기 쉬운 형식으로 반환합니다.
print(f"현재 시간 (ctime): {time.ctime()}")
# 시간을 ASCII 형식으로 변환합니다.
print(f"현재 시간 (asctime): {time.asctime()}")
# 지정된 형식으로 현재 시간을 문자열로 반환합니다.
formatted_time = time.strftime("%H:%M:%S %Y-%m-%d")
print(f"형식화된 현재 시간: {formatted_time}")
from time import *를 사용하여 모든 요소를 가져온 경우:
from time import *
print(f"현재 타임스탬프: {time()}") # time.time()과 동일
sleep(2) # time.sleep(2)와 동일
print(f"현재 시간 (ctime): {ctime()}") # time.ctime()과 동일
print(f"현재 시간 (asctime): {asctime()}") # time.asctime()과 동일
print(f"형식화된 현재 시간: {strftime('%H:%M:%S %Y-%m-%d')}") # time.strftime(...)과 동일
2. random 모듈
random 모듈은 난수 생성과 관련된 다양한 함수를 제공합니다.
from random import *
# 0.0 이상 1.0 미만의 임의의 부동소수점 숫자를 생성합니다.
# print(f"0과 1 사이의 임의의 실수: {random()}")
# 지정된 범위(시작값 포함, 끝값 포함) 내의 임의의 정수를 생성합니다.
# print(f"1과 100 사이의 임의의 정수: {randint(1, 100)}")
# 지정된 범위(시작값 포함, 끝값 미포함) 내의 임의의 정수를 생성합니다.
# print(f"1부터 9까지의 임의의 정수: {randrange(1, 10)}")
# 지정된 범위에서 지정된 간격으로 임의의 정수를 생성합니다.
# print(f"1부터 9까지의 임의의 홀수: {randrange(1, 10, 2)}")
# print(f"2부터 9까지의 임의의 짝수: {randrange(2, 10, 2)}")
my_list = [1, 2, 3, 4, 5, 6]
# 리스트에서 지정된 개수만큼 임의의 요소를 선택하여 새 리스트로 반환합니다.
# print(f"리스트에서 2개 무작위 선택: {sample(my_list, 2)}")
# 비어 있지 않은 시퀀스(리스트, 튜플, 문자열 등)에서 임의의 요소를 하나 선택합니다.
print(f"리스트에서 무작위로 선택된 요소: {choice(my_list)}")
# 시퀀스의 모든 요소를 무작위로 섞습니다.
shuffle(my_list)
print(f"무작위로 섞인 리스트: {my_list}")
3. string 모듈
string 모듈은 일반적인 문자열 상수를 제공합니다.
import string
# 0부터 9까지의 숫자
print(f"숫자: {string.digits}")
# 16진수 문자
print(f"16진수 문자: {string.hexdigits}")
# 모든 소문자
print(f"소문자: {string.ascii_lowercase}")
# 모든 대문자
print(f"대문자: {string.ascii_uppercase}")
# 모든 알파벳 대소문자
print(f"알파벳: {string.ascii_letters}")
# 모든 알파벳 대소문자와 숫자
print(f"알파벳 + 숫자: {string.ascii_letters + string.digits}")
실습 과제
- 지정한 세 자리로 시작하는 임의의 휴대폰 번호를 생성하세요.
- 임의의 6자리 숫자 인증 코드를 생성하세요.