[파이썬 핵심 기초 다지기] 모듈

julian·2025년 2월 19일

python

목록 보기
11/74
post-thumbnail

📌 사용 환경

Python 3.10.2
conda 24.9.0
JupyterLab 4.2.5


1. 모듈

  • 포준모듈: python 설치와 함께 따라오는 모듈
  • 사용자모듈: 프로그래머가 생성한 모듈
  • 서드파티(3rd Party) 모듈: 업체에서 제공하는 모듈

모듈이란 함수나 변수 또는 클래스르 모아 놓은 파일이다.
그리고 그 파일은 a.py라는 파일명에 변수, 함수, 클래스가 다 모여 있는 것이다.

모듈(calc.py 파일)을 만들어보자. calc.py라는 파일을 생성한다.

모듈을 import하는 방법은 총 4가지가 있다.

1.1. 사용자 모듈

import moduleName(파일명)

import calc

만약 오류가 난다면 경로나 파일명을 다시 확인하자.

print(calc.plus(10,20))
print(calc.minus(10,20))
print(calc.multiply(10,20))
print(calc.divide(10,20))

num=calc.Num(20,30)
num.disp()

print(calc.sayHi)

# ✅ 출력 결과
# 30
# -10
# 200
# 0.5
# 20, 30
# Hi

import moduleName as 별칭

calc.과 같이 모듈명을 붙여주지 않고 별칭을 붙여주자.

import calc as c
print(c.plus(30,40))
print(c.minus(30,40))
print(c.multiply(30,40))
print(c.divide(30,40))

# ✅ 출력 결과
# 70
# -10
# 1200
# 0.75

from moduleName import 변수 또는 함수명들

모듈의 전체 내용을 다 사용하지 않고, 그 중에서 필요한 plus와 minus만 필요한 경우가 있다.

from calc import plus, minus  # 원하는 함수 plus, minus
print(plus(50,60))
print(minus(50,60))

# ✅ 출력 결과
# 110
# -10

from moduleName import *

모듈이 가진 모두를 다 가져오는 것이다.
*를 붙여서 모두 다 가져올 때는 모듈명을 사용하지 않는다.

from calc import *

print(plus(60,70))
print(minus(60,700))
print(multiply(60,70))
print(divide(60,70))

num=Num(70,80)
num.disp()

print(sayHi)

# ✅ 출력 결과
# 130
# -640
# 4200
# 0.8571428571428571
# 70, 80
# Hi

1.2. 표준 모듈

  • math: 수학
  • statistics: 통계
  • random: 난수
  • datatime: 날짜

python 설치와 자동으로 설치되는 모듈로 내장 함수와 달리 import 해서 사용해야 한다.

import sys  # system
import math 
# 표준 모듈 목록을 확인하고 싶다면
sys.builtin_module_names  

# 모듈의 정보를 확인하고 싶다면
dir(math)  # dir은 내장함수

# 함수의 상세 설명
help(math.pow)  # help: 내장함수

# ✅ 출력 결과
# ('_abc',
# '_ast',
# '_bisect',
# '_blake2',
# '_codecs',
# ...

# ['__doc__',
# '__loader__',
# '__name__',
# '__package__',
# '__spec__',
# ...

# Help on built-in function pow in module math:

#     pow(x, y, /)
#         Return x**y (x to the power of y).

참고로 모듈을 import 하는 방법중 특정 함수에도 별칭을 부여할 수 있다.

from math import pow as p
p(5,3)  # 125.0

math 모듈
수학 연산에 필요한 다양한 연산 상수와 함수 제공

from math import *

print("제곱근:", sqrt(10))
print("x의 y승:", pow(3,2))
print("x의 계승:", factorial(5))
print("무조건 올림:", ceil(20.33))
print("무조건 내림:", floor(20.55))
print("절대값:", fabs(-20))
print("원주율 상수:", pi)

# ✅ 출력 결과
# 제곱근: 3.1622776601683795
# x의 y승: 9.0
# x의 계승: 120
# 무조건 올림: 21
# 무조건 내림: 20
# 절대값: 20.0
# 원주율 상수: 3.141592653589793

statistics 모듈
통계관련 모듈

import statistics as stat

arr=[10,20,30,40,50,60,70,80,90,10]

print("평균값:", stat.mean(arr))
print("중앙값:", stat.median(arr))
print("최빈값:", stat.mode(arr))

print("분산:", stat.variance(arr))
print("표준편차:", stat.stdev(arr))
print("묘표준편차:", stat.pstdev(arr))

# ✅ 출력 결과
# 평균값: 46
# 중앙값: 45.0
# 최빈값: 10
# 분산: 826.6666666666666
# 표준편차: 28.751811537130433
# 묘표준편차: 27.27636339397171

날짜 관련 모듈

  • datetime
    • 날짜와 시간에 관련된 모듈
    • datetime 모듈 내 datetime, date 등의 class 존재
    • 즉 datetime.datetime 이런식으로 접근할 것
      (class이지만 대문자로 시작하지 않으니 이를 잘 기억하자)

그동안 다룬 데이터들은 숫자(정수, 실수), 문자 등이 있었고 앞으로 날짜형에 대한 내용이 좀 나올 예정이다.
주식시장에 관련되었다면 하루하루 변동이 있으니 이런 부분이 중요해질 것이다.
나중에 pandas 부분에서 이를 이용하는 경우가 있을 예정이다.

import datetime
print(datetime.datetime.now())  # 날짜와 시간 출력
print(datetime.date.today())  # 날짜 출력

# ✅ 출력 결과
# 2025-02-19 14:11:01.819589
# 2025-02-19

⭐ random 모듈
난수를 발생시키는 모듈
많이 사용하는 중요한 모듈이다.

import random

print(random.random())  # 0~1 사이의 수
print(random.randint(1,10))  # 1~10 사이의 무작위 정수형 난수 출력
print(random.uniform(1,10))  # 1~10 사이의 무작위 실수형 난수 출력

nums=[1,2,3,4,5,6,7,8,9,10]
print(random.choice(nums))  
print(random.choices(nums, k=3))  # 3개를 뽑는데, 중복도 허용함
print(random.sample(nums,3))  # 3개를 뽑는데, 중복을 허용하지 않음

random.shuffle(nums)  # 섞은 다음에 print를 해줘야 섞인 값이 나옴
print(nums)

# ✅ 출력 결과
# 0.03324111744691882
# 4
# 7.340793357844356
# 9
# [7, 6, 3]
# [10, 2, 9]
# [7, 5, 6, 2, 10, 1, 8, 3, 9, 4]

여기 print(random.choices(nums, k=3))의 내부를 보면
Signature: random.choices(population, weights=None, *, cum_weights=None, k=1)
이와 같이 써져 있는 부분이 있는데,
print(random.sample(nums, 3))의 내부는
Signature: random.sample(population, k)
이렇게 써져있다.

따라서 sample의 경우는 그냥 nums와 3이 순서대로 들어가는데,
choices의 경우는 내부에서 default로 1이 할당되어 있기 때문에 이를 호출하는 부분에서 k=을 붙이지 않는다면 choices의 내부 중, wieghts로 들어가기 때문에 이 부분을 주의해서 사용해야 한다.
즉 default 인수에 값을 넣어주어야 하기 때문에 k=3과 같이 입력해야한다.

1.3. ⭐ 모듈, 패키지, 라이브러리

모듈(Module)과 패키지(Package), 라이브러리(Library)의 차이점에 대해 조금 알고 가자.

1.3.1. 모듈 (Module)

모듈은 Python 코드 파일로 .py의 형태를 띈다.
이 모듈에는 변수, 함수, 클래스 등이 포함되어 있으며, 다른 파일에서는 이 모듈을 import하여 사용한다.

1.3.2. 패키지 (Package)

패키지는 여러 모듈이 모인 폴더(디렉터리)라고 생각하면 된다.
이때 해당 폴더에는 __init__.py 라는 파일을 포함하며, 이 파일은 패키지가 초기화될 때 실행된다. 해당 파일이 있으면 패키지라고 알 수 있다.
이 패키지는 여러 모듈이 모여있기 때문에 특정 모듈들을 사용해야 하는 경우 해당 패키지를 사용할 수 있다.

즉 a라는 패키지에 b.py라는 모듈파일이 있고,
b.py라는 모듈파일 안에 print_hello()라는 함수가 포함되어 있다면,
다음과 같이 import한다.

from a import b
b.print_hello()

즉 모듈을 import할 때는

import 모듈명  
import 모듈명 as 별칭  
from 모듈명 import 변수명,함수명,클래스명  
from 모듈명 import *  

이렇게 했었는데, 패키지명은 모듈명.이 앞에 들어가면 된다.

import 패키지명.모듈명  
import 패키지명.모듈명 as 별칭  
from 패키지명.모듈명 import 변수명,함수명,클래스명  
from 패키지명.모듈명 import *  

물론 이렇게 되면 가장 많이 쓰이는건? 당연히 패키지명.모듈명까지 붙여야 하니까 as 별칭을 가장 많이 사용할 것이다.

1.3.3. 라이브러리 (Library)

라이브러리는 모듈이나 패키지들을 모아놓은 집합이다.

예를 들어 NumPy, Pandas, Matplotlib 같은 것들은 라이브러리이며, 수학, 데이터 처리, 시각화 등에 필요한 여러 패키지와 모듈들을 포함한다.

1.3.4. 정리

라이브러리 > 패키지 > 모듈 의 포함관계를 가지며,
Numpy 라이브러리에는 numpy.random 이라는 패키지가 있으며, numpy.random 패키지 안에는 random.py 라는 모듈 파일이 있다.


💪 퀴즈

Q1. calc 모듈을 import하고, plus 함수와 minus 함수의 결과를 출력하기 위한 과정으로 옳은 것은?

def plus(a, b):
    return a + b

def minus(a, b):
    return a - b

1) import calcprint(plus(10, 20))print(minus(10, 20))
2) import calc as cprint(plus(10, 20))print(c.minus(10, 20))
3) from calc import plus, minusprint(plus(10, 20))print(minus(10, 20))
4) from calc import *print(10, 20)print(10, 20)

A1. 3

Q2. import calc as c 형태로 import 할 때, plus(5, 3)의 결과를 출력하는 방법으로 가장 적절한 것은?

# calc.py
def plus(a, b):
    return a + b

1) print(c.plus(5, 3))
2) print(plus(5, 3))
3) print(calc.plus(5, 3))
4) print(c.plus(b=3, 5))

A2. 1

Q3. from calc import *import calc의 차이점에 대한 설명으로 올바른 것은?
1) from calc import *는 모듈 내 모든 함수와 변수들을 가져오고, import calc는 모듈을 가져오지만 앞에 calc.를 붙여야 한다.
2) import calc는 모듈 내 모든 함수와 변수들을 가져오고, from calc import *는 특정 함수만 가져온다.
3) 두 방법은 동일하게 모든 함수와 변수를 가져온다.
4) import calc는 오류를 발생시키고, from calc import *는 모든 함수만 가져온다.

A3. 1

Q4. Num 클래스를 포함하는 calc.py 모듈을 불러올 때, 해당 클래스를 사용하는 방법으로 올바른 것은?

class Num:
	def __init__(self, a, b):
		self.a = a
		self.b = b

	def disp(self):
		print(self.a, self.b)

1) import calcnum = calc.Num(5, 7)num.disp()
2) from calc import Numnum = Num(5, 7)num.disp()
3) from calc import *num = Num(5, 7)num.disp()
4) import calc as cnum = c.Num(5, 7)num.disp()

A4. 2

Q5. from calc import *를 사용했을 때, calc.py 모듈에서 불러와지는 요소는?

def plus(a, b):
    return a + b

def minus(a, b):
    return a - b

sayHi = "Hello"

1) plus, minus, sayHi 모두
2) plus, minus
3) sayHi
4) plus

A5. 1

Q6. calc.py 모듈을 import calc로 불러왔을 때, plus(10, 20)을 호출하는 방식으로 옳은 것은?
1) plus(10, 20)
2) calc.plus(10, 20)
3) calc(10, 20)
4) plus(calc, 10, 20)

A6. 2

Q7. from calc import plus, minus로 함수 둘을 불러왔을 때, plus 함수만 호출하는 방식으로 옳은 것은?
1) plus(10, 20)
2) calc.plus(10, 20)
3) calc(10, 20)
4) minus(10, 20)

A7. 1

Q8. 다음 코드에서 from math import sqrt를 사용한 후 sqrt(25)의 결과는 무엇인가요?

from math import sqrt

print(sqrt(25))

1) 5.0
2) 25
3) Error: sqrt is not defined
4) 5

A8. 1

profile
AI Model Developer

0개의 댓글