πŸ› οΈBackend/⚑Python

[Python] 11κ°• - λͺ¨λ“ˆ

junbin2 2025. 4. 21. 01:12

1. λͺ¨λ“ˆμ˜ 이해

(1) λͺ¨λ“ˆμ˜ κ°œλ…

 - 클래슀, ν•¨μˆ˜, λ³€μˆ˜μ˜ 집합을 μ˜λ―Έν•œλ‹€.

 - νŒŒμ΄μ¬μ—μ„  파이썬 μ½”λ“œ(.py 파일)λ₯Ό ν•˜λ‚˜μ˜ 파일 λ‹¨μœ„λ‘œ μ €μž₯ν•œ 것을 λͺ¨λ“ˆμ΄λΌ 함.

 - 즉, ν•˜λ‚˜μ˜ νŒŒμΌμ— λ³€μˆ˜, ν•¨μˆ˜, 클래슀 등을 λͺ¨μ•„두고 이걸 λ‹€λ₯Έ 파이썬 νŒŒμΌμ—μ„œ import(뢈러였기)ν•΄μ„œ μ΄μš©μ„ ν•œλ‹€.

 

(2) λͺ¨λ“ˆμ˜ μ—­ν• 

 - 파이썬 파일둜 λ‚˜λˆ μ„œ μœ μ§€λ³΄μˆ˜μ„±κ³Ό 가독성을 μ’‹κ²Œ λ§Œλ“€ 수 있음. κ΄€λ¦¬ν•˜κΈ°κ°€ 쉬움

 - λ˜ν•œ, λΌμ΄λΈŒλŸ¬λ¦¬μ™€ ν”„λ ˆμž„μ›Œν¬μ‹μœΌλ‘œ λΆˆλŸ¬μ™€μ„œ μ΄μš©μ„ ν•  μˆ˜λ„ 있음. ( 특히 νŒŒμ΄μ¬μ€ λΌμ΄λΈŒλŸ¬λ¦¬κ°€ 많음 )

 

(3) λͺ¨λ“ˆ, νŒ¨ν‚€μ§€, 라이브러리 차이

 - λͺ¨λ“ˆ : 클래슀, ν•¨μˆ˜, μƒμˆ˜(λ³€μˆ˜)의 μ§‘ν•©

 - νŒ¨ν‚€μ§€ : ν•˜μœ„ νŒ¨ν‚€μ§€ 및 λͺ¨λ“ˆμ˜ μ§‘ν•©

 - 라이브러리 : νŒ¨ν‚€μ§€ 및 λͺ¨λ“ˆμ˜ μ§‘ν•© 

 

(4) λͺ¨λ“ˆ 등둝 방법

[1] κΈ°λ³Έ import λ¬Έ

import test

 

 - κ°€μž₯ ν”ν•˜κ²Œ 많이 μ“°μ΄λŠ” 방식

 

[2] 별칭 import λ¬Έ

import test as t # μ‚¬μš© μ‹œ t.ν•¨μˆ˜λͺ… λ°©μ‹μœΌλ‘œ μ‚¬μš© κ°€λŠ₯

 - κΈ΄ λͺ¨λ“ˆλͺ…을 κ°–λŠ” 경우 μ‚¬μš©ν•˜λ©΄ μ’‹μŒ

 

[3] from import 

from test import add # test νŒŒμΌμ— add() ν•¨μˆ˜λ§Œ import

 - νŠΉμ • ν•¨μˆ˜ λ˜λŠ” 클래슀만 μž„ν¬νŠΈλ₯Ό ν•˜λŠ” 방식이닀.

 

(5) λͺ¨λ“ˆμ˜ 등둝 확인

 [1] dir ν•¨μˆ˜

 - λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— λ“±λ‘λ˜μ–΄ μžˆλŠ” λͺ¨λ“  이름듀을 리슀트둜 λ°˜ν™˜

import test
print(dir(test))

# test.py
def bin():
  print("good")

 - ν•΄λ‹Ή dir의 κ²°κ³Όλ₯Ό ν”„λ¦°νŠΈλ‘œ 찍어보면, ν•΄λ‹Ή test.py λͺ¨λ“ˆμ— μžˆλŠ” ν•¨μˆ˜λ‚˜ λ³€μˆ˜ 등을 λ³Ό 수 μžˆλ‹€.

[2] help ν•¨μˆ˜

 - λŒ€ν™”ν˜• 도움말 μ‹œμŠ€ν…œ 호좜 λ˜λŠ” ν΄λž˜μŠ€λ‚˜ λ©”μ†Œλ“œμ˜ μ‚¬μš©λ°©λ²•μ„ λ°˜ν™˜ ν•΄μ£ΌλŠ” ν•¨μˆ˜

import math
help(math) # help(object) 방식 -> κΈ°μž¬ν•΄μ„œ ν•΄λ‹Ή ν•¨μˆ˜μ˜ μ„€λͺ…을 듀을 수 있음.
help() # λŒ€ν™”ν˜• ν—¬ν”„ μ‹œμŠ€ν…œ -> μ‹€ν–‰μ‹œμΌœμ„œ 직접 μ³μ„œ 찾을 수 있음.

 

(6) λͺ¨λ“ˆμ˜ 제거

 - μƒˆ λͺ¨λ“ˆμ˜ ν•¨μˆ˜, λ³€μˆ˜ λ“±μ˜ 이름이 κ²ΉμΉ˜λŠ” 이유둜 이전 λͺ¨λ“ˆμ„ μ œκ±°ν•΄μ•Ό ν•  λ•Œ μ‚¬μš©μ„ ν•œλ‹€.

[1] del ν‚€μ›Œλ“œ

x = 10
del x
print(x)  # NameError: name 'x' is not defined

 - μ˜ˆμ‹œμ½”λ“œ 처럼 λ³€μˆ˜λ§Œ μ‚­μ œκ°€ κ°€λŠ₯ν•œκ²ƒμ΄ μ•„λ‹Œ ν•¨μˆ˜ λ“± λ‹€μ–‘ν•˜κ²Œ μ‚­μ œκ°€ κ°€λŠ₯ν•˜λ‹€.

 - del ν‚€μ›Œλ“œλŠ” μ •μ˜λœ λ³€μˆ˜λ‚˜ 객체λ₯Ό λ©”λͺ¨λ¦¬μ—μ„œ μ—†μ• λ²„λ¦¬λŠ” 역할을 ν•œλ‹€.

 - μ„œλΉ„μŠ€κ°„μ— del ν‚€μ›Œλ“œλŠ” μœ„ν—˜ν•˜κΈ° λ•Œλ¬Έμ— 잘 μ‚¬μš©μ΄ λ˜μ§€λŠ” μ•Šμ§€λ§Œ, ν…ŒμŠ€νŠΈμ— μ‚¬μš©ν•˜κΈ°μ—λŠ” 적합함

 


2. μœ μš©ν•œ λͺ¨λ“ˆ

(1) math λͺ¨λ“ˆ

 - μˆ˜ν•™μ  계산 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ μˆ˜ν•™ ν•¨μˆ˜ 및 μƒμˆ˜μ˜ μ§‘ν•© λͺ¨λ“ˆμ΄λ‹€.

 - C μ–Έμ–΄ ν‘œμ€€μ— μ •μ˜λœ μˆ˜ν•™μ  계싼 ν•¨μˆ˜λ₯Ό λ‚΄μž₯

 - pi, e와 같은 μƒμˆ˜λ₯Ό μ œκ³΅ν•΄μ£ΌκΈ°λ„ 함.

import math

# 제곱근
print(math.sqrt(25))  # 좜λ ₯: 5.0

# κ±°λ“­μ œκ³± (2의 3제곱)
print(math.pow(2, 3))  # 좜λ ₯: 8.0

# 반올림 κ΄€λ ¨
print(math.floor(3.7))  # 좜λ ₯: 3 (λ‚΄λ¦Ό)
print(math.ceil(3.2))   # 좜λ ₯: 4 (올림)
print(math.trunc(3.9))  # 좜λ ₯: 3 (μ†Œμˆ˜μ  제거)

# μ‚Όκ°ν•¨μˆ˜
print(math.sin(math.pi / 2))  # 좜λ ₯: 1.0
print(math.cos(0))            # 좜λ ₯: 1.0

# 둜그
print(math.log(100, 10))  # 좜λ ₯: 2.0 (밑이 10인 둜그)

# νŒ©ν† λ¦¬μ–Ό
print(math.factorial(5))  # 좜λ ₯: 120

# μƒμˆ˜
print(math.pi)     # 좜λ ₯: 3.141592...
print(math.e)      # 좜λ ₯: 2.718281...

# 각도 λ³€ν™˜
print(math.degrees(math.pi))  # 좜λ ₯: 180.0
print(math.radians(180))      # 좜λ ₯: 3.141592...

 - μ˜ˆμ‹œμ²˜λŸΌ μˆ˜ν•™μ μœΌλ‘œ μœ μš©ν•˜κ²Œ μ“°μ΄λŠ” ν•¨μˆ˜μ™€ μƒμˆ˜λ“€μ˜ 집합이닀.

 

(2) random λͺ¨λ“ˆ

 - λ‚œμˆ˜(random number) : νŠΉμ •ν•œ λ°°μ—΄ μˆœμ„œλ‚˜ κ·œμΉ™μ μΈ μ˜λ―Έκ°€ μ—†λŠ”, μž„μ˜μ˜ 수λ₯Ό μ˜λ―Έν•œλ‹€.

 - λ‚œμˆ˜ κ΄€λ ¨λœ 생성 κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” λͺ¨λ“ˆμ„ random λͺ¨λ“ˆμ΄λΌ ν•œλ‹€.

[1] random λͺ¨λ“ˆ 멀버

# random λͺ¨λ“ˆ μ£Όμš” ν•¨μˆ˜ 정리
import random

# 1. random.random()
# - 0.0 이상 1.0 미만의 μ‹€μˆ˜λ₯Ό λ°˜ν™˜
# 예: 0.345, 0.982 λ“±
random.random()

# 2. random.randint(a, b)
# - a 이상 b μ΄ν•˜μ˜ μ •μˆ˜λ₯Ό λ°˜ν™˜ (μ–‘μͺ½ 끝 포함)
# 예: random.randint(1, 5) β†’ 1, 2, 3, 4, 5 쀑 ν•˜λ‚˜
random.randint(1, 5)

# 3. random.uniform(a, b)
# - a 이상 b μ΄ν•˜μ˜ μ‹€μˆ˜λ₯Ό λ°˜ν™˜
# 예: random.uniform(1.0, 5.0) β†’ 1.234 λ“±
random.uniform(1.0, 5.0)

# 4. random.choice(seq)
# - μ‹œν€€μŠ€(리슀트, νŠœν”Œ λ“±)μ—μ„œ λ¬΄μž‘μœ„λ‘œ ν•˜λ‚˜ 선택
# 예: random.choice(['a', 'b', 'c']) β†’ 'a' λ˜λŠ” 'b' λ˜λŠ” 'c'
random.choice(['a', 'b', 'c'])

# 5. random.choices(seq, k=n)
# - μ‹œν€€μŠ€μ—μ„œ 쀑볡 ν—ˆμš©ν•˜λ©° n개 선택
# 예: random.choices([1, 2, 3], k=2) β†’ [2, 2] λ˜λŠ” [1, 3] λ“±
random.choices([1, 2, 3], k=2)

 

(3) time λͺ¨λ“ˆ

 - 에포크 μ‹œκ°„μ„ μ–»μ–΄ λ‹€μ–‘ν•œ ν˜•μ‹μœΌλ‘œ ν‘œμ‹œν•˜λŠ” κΈ°λŠ₯을 μ œκ³΅ν•¨.

 - 에포크 μ‹œκ°„μ΄λž€, 컴퓨터 μ‹œμŠ€ν…œμ—μ„œ μ‹œκ°„μ„ ν‘œν˜„ν•˜κΈ° μœ„ν•œ 기쀀점과 μΈ‘μ • 방법을 μ˜λ―Έν•œλ‹€.

 - νŠΉμ • κΈ°μ€€ μ‹œμ (에포크)λΆ€ν„° μ–Όλ§ˆλ‚˜ μ‹œκ°„μ΄ ν˜λ €λŠ”μ§€λ₯Ό "초 λ‹¨μœ„"둜 λ‚˜νƒ€λ‚΄λŠ” 숫자λ₯Ό μ˜λ―Έν•œλ‹€.

 - 에포크 μ‹œκ°„μ˜ κΈ°μ€€μ μ€ 1970λ…„ 1μ›” 1일 00μ‹œ 00λΆ„ 00초 (UTC)이닀.

 - 참고둜 μœ λ‹‰μŠ€ μ‹œμŠ€ν…œμ΄ 1970λ…„ 1μ›” 1일을 κΈ°μ€€μœΌλ‘œ μ„€μ •ν–ˆκΈ° λ•Œλ¬Έμž„. μœ λ‹‰μŠ€ μ‹œκ°„μ΄λΌκ³  함.

import time

# 1. ν˜„μž¬ 에포크 μ‹œκ°„ (1970λ…„λΆ€ν„° μ§€λ‚œ 초)
epoch_time = time.time()
print("πŸ“Œ ν˜„μž¬ 에포크 μ‹œκ°„:", epoch_time)

# 2. 에포크 μ‹œκ°„ β†’ 둜컬 μ‹œκ°„ (struct_time 객체)
local_time = time.localtime(epoch_time)
print("πŸ“Œ 둜컬 μ‹œκ°„ (struct_time):", local_time)

# 3. 둜컬 μ‹œκ°„ β†’ 보기 쒋은 λ¬Έμžμ—΄
formatted_time = time.strftime("%Y-%m-%d %H:%M:%S", local_time)
print("πŸ“Œ 포맷된 μ‹œκ°„:", formatted_time)

# 4. λ¬Έμžμ—΄ β†’ struct_time (νŒŒμ‹±)
time_str = "2025-04-23 15:00:00"
parsed_time = time.strptime(time_str, "%Y-%m-%d %H:%M:%S")
print("πŸ“Œ λ¬Έμžμ—΄ νŒŒμ‹±:", parsed_time)

# 5. struct_time β†’ 에포크 μ‹œκ°„
epoch_from_str = time.mktime(parsed_time)
print("πŸ“Œ νŒŒμ‹±λœ μ‹œκ°„μ˜ 에포크 κ°’:", epoch_from_str)

# 6. 2초 λŒ€κΈ°
print("⏳ 2초 λŒ€κΈ° 쀑...")
time.sleep(2)
print("βœ… λŒ€κΈ° μ™„λ£Œ")