6. 모듈#

모듈module은 이미 선언된 함수, 변수, 클래스의 정의가 포함된 소스코드 파일이며, 파일명의 확장자는 .py이다. 아래 세 모듈의 이용하여 모듈에 포함된 함수, 변수 등을 활용하는 일반적인 방법을 소개한다.

  • time 모듈: 시간과 관련된 유용한 함수 제공

  • random 모듈: 무작위로 수를 생성하고 계산하는 다양한 함수 제공

  • math 모듈: 수학에서 많이 활용되는 다양한 함수와 상수 제공

모듈 사용법은 다음 세 가지 방식 중에서 하나를 필요에 따라 선택하면 된다.

  • import 모듈명

  • from 모듈명 import ...

  • import 모듈명 as 모듈별칭

모듈의 보다 다양한 활용법은 21장에서 다룬다.

6.1. 모듈 활용법 1: import 모듈명#

time 모듈은 시간과 관련된 유용한 함수를 제공한다. 여기서는 sleep(), time(), ctime() 함수의 간단한 사용법을 소개한다.

time.sleep() 함수

time 모듈의 sleep() 함수는 초 단위로 지정된 정수 인자와 함께 호출되면 파이썬 실행기를 지정된 시간만큼 작동을 멈추게 한다. 예를 들어 아래 코드는 0부터 4까지의 정수를 1초에 하나씩 출력한다.

import time
for sec in [0, 1, 2, 3, 4]:
    print(sec, end=", ")
    time.sleep(1)
0, 1, 2, 3, 4, 

time.time() 함수

time 모듈의 time() 함수는 인자없이 호출되면 컴퓨터 시간의 시작시점부터 흐른 시간을 부동소수점으로 반환한다.

time.time()
1708347159.6067524

time.ctime() 함수

ctime() 함수는 인자없이 호출되면 현재 시각을 서양식으로 보여준다.

time.ctime()
'Mon Feb 19 21:52:39 2024'

ctime() 함수는 또한 부동소수점과 함께 호출되면 인자로 지정된 부동소수점을 컴퓨터 시간의 기원부터 흐른 시간에 해당하는 시각을 서양식으로 보여준다.

t = time.time()
time.ctime(t)
'Mon Feb 19 21:52:39 2024'

ctime() 함수의 인자를 0으로 지정한 후에 호출하면 컴퓨터 시간의 시작시점을 확인할 수 있다.

time.ctime(0)
'Thu Jan  1 09:00:00 1970'

리눅스 등 UNIX 계열의 컴퓨터는 1970년 1월 1일을 컴퓨터 시간의 기원으로 사용한다. 반면에 윈도우 계열의 컴퓨터는 1601년 1월 1일을 컴퓨터 시간의 기원으로 사용한다. 위 코드의 결과는 1970년 1월 1일 0시가 아니라 오전 9시를 보여준다. 하지만 이는 한국시간으로 변환된 시간이며 그리니치 표준시, 즉 영국 시간으로는 1970년 1월 1일 0시를 가리킨다.

6.2. 모듈 활용법 2: from 모듈명 import ...#

예를 들어 1부터 5까지의 정수 중에서 무작위로 하나의 정수를 계산하는 함수가 필요할 때 random 모듈의 randint() 함수를 활용할 수 있다. 이를 위해 먼저 random 모듈을 불러온다.

import random

이제 randint() 함수를 다음과 같이 호출할 때마다 1부터 5까지의 정수 중에서 하나의 정수가 무작위로 반환된다.

random.randint(1, 5)
5
random.randint(1, 5)
3

그리고 random 모듈의 random() 함수는 구간 [0, 1), 즉 0 이상, 1 미만 사이의 구간에서 무작위로 하나의 부동소수점을 생성한다. 아래 코드는 random() 모듈을 세 번 호출할 때마다 매번 무작위로 새로운 부동소수점이 생성됨을 보여준다.

for i in [0, 1, 2]:
    print(random.random())
0.8397274817569601
0.88477919392369
0.9920595479127735

즉 모듈에 포함된 함수를 사용하려면 점을 사이에 두고 모듈 이름과 함수를 함께 표현한다.

random 모듈과 random() 함수

함수와 모듈의 이름이 동일하기에 구분을 위해서라도 함수에는 항상 소괄호 ()를 의도적으로 붙여서 함수임을 강조한다.

random.seed() 함수

random 모듈에 포함된 함수들은 기본적으로 호출될 때마다 무작위로 수를 생성하기에 호출될 때마다 다른 값을 반환한다. 실제로는 파이썬 실행기가 무작위 수 생성 기능의 사용 횟수에 따라 함수가 반환해야 하는 값을 차례대로 지정한다.

따라서 무작위로 수를 생성하는 함수를 실행할 때마다 동일한 값이 생성되도록 하려면 무작위수 생성 기능의 사용 횟수를 초기화하면 된다. 이를 위해 random.seed() 함수를 이용한다. 인자는 0보다 같거나 큰 정수가 사용된다. 예를 들어 아래 코드는 무작위수 생성 기능이 17번 사용되었다고 가정하도록 한다.

random.seed(17)

random.seed() 함수와 함께 random 모듈의 함수를 호출하면 항상 동일한 결과를 얻는다. 아래 코드는 random.seed() 함수를 이용하면 매번 동일한 결과가 나온다는 사실을 보여준다.

for i in [0, 1, 2]:
    random.seed(17)
    print(random.random())
0.5219839097124932
0.5219839097124932
0.5219839097124932

random.seed() 함수의 인자를 달리하면 다른 결과를 얻는다.

for i in [0, 1, 2]:
    random.seed(0)
    print(random.random())
0.8444218515250481
0.8444218515250481
0.8444218515250481

그런데 만약 randint() 함수를 자주 사용한다면 random.randint()처럼 매번 random 모듈명과 함께 호출하는 게 불편할 수 있다. 그런 경우 from ... import ... 명령문을 사용하면 보다 편리하게 자주 활용하는 함수를 호출할 수 있다. 예를 들어 아래 코드는 random 모듈에서 randint() 함수와 seed() 함수만 따로 불러온다.

from random import randint, seed

그러면 모듈명 없이 randint() 함수를 사용할 수 있다.

seed(10)

for i in [0, 1, 2]:
    print(randint(1, 100))
74
5
55

반면에 random 모듈의 다른 함수는 항상 모델명과 함께 사용해야 한다. 그렇지 않으면 아래처럼 함수가 정의되지 않았다는 의미의 NameError 오류가 발생한다.

random()
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[16], line 1
----> 1 random()

NameError: name 'random' is not defined

6.3. 모듈 활용법 3: import 모듈명 as 모듈별칭#

수학에서 많이 사용되는 log, sin, cos 등의 함수의 정의는 math 모듈에 포함되어 있다. 예를 들어 아래 코드는 정수 2의 자연로그값을 계산한다.

import math

math.log(2)
0.6931471805599453

math 모듈엔 원주율 pi와 같은 중요한 상수도 변수로 정의되어 있으며 사용방법은 동일하다. 단 변수는 소괄호 기호가 사용되지 않는다.

math.pi
3.141592653589793

sin(), cos() 등의 함수도 제공된다. 아래 두 코드는 앞서 언급한 원주율 변수 math.pi를 인자로 활용한다.

math.sin(math.pi/2)
1.0
math.cos(math.pi)
-1.0

그런데 만약에 예를 들어 log() 함수와 pi 변수를 자주 사용한다면 매번 math.log(), math.pi 등으로 모듈명을 함께 사용하는 일이 귀찮을 수 있다. 특히 모듈명이 긴 경우가 그렇다. 이럴 때는 모듈명에 보다 간단한 별칭을 대신 지정하여 함수 호출에 활용할 수 있다. 예를 들어 아래 코드는 math 모듈의 별칭을 m으로 지정하면서 불러온다.

import math as m

그러면 math 모듈에 포함된 모든 함수와 변수를 m.log(), m.pi 등으로 사용할 수 있다.

m.log(2)
0.6931471805599453
m.pi
3.141592653589793
m.sin(m.pi/2)
1.0
m.cos(m.pi)
-1.0

6.4. 필수 예제#

참고: (필수 예제) 모듈

6.5. 연습문제#

참고: (연습) 모듈