Python 개발자가 반드시 알아야 할 내장 라이브러리 6가지

2024. 11. 28. 22:23프로그래밍 언어/Python

 

 

Python은 강력한 내장 라이브러리를 제공하여 다양한 작업을 손쉽게 수행할 수 있도록 돕습니다. 특히 초급 개발자가 기본적으로 익혀야 할 핵심 모듈들이 있습니다. 이 글에서는 초급 개발자를 위한 설명과 실습 예제를 통해, Python 내장 라이브러리 7가지를 쉽게 이해할 수 있도록 도와드립니다.

 


1. os - 파일 시스템 관리

os 모듈은 파일이나 디렉터리를 다루고, 운영 체제와 상호작용할 때 사용됩니다. 초보자에게 유용한 주요 기능은 다음과 같습니다:

주요 기능

  • 현재 디렉터리 가져오기: os.getcwd()
  • 디렉터리 생성/삭제: os.makedirs(), os.rmdir()
  • 파일 존재 여부 확인: os.path.exists()

실습 예제

import os

# 현재 디렉터리 확인
current_dir = os.getcwd()
print(f"현재 디렉터리: {current_dir}")

# 새 디렉터리 만들기
new_dir = "example_folder"
os.makedirs(new_dir, exist_ok=True)
print(f"{new_dir} 디렉터리가 생성되었습니다!")

# 디렉터리 존재 여부 확인
if os.path.exists(new_dir):
    print(f"{new_dir} 디렉터리가 존재합니다.")

 

 


2. sys - 스크립트 제어

sys 모듈은 Python 인터프리터와 직접 상호작용하며, 명령줄 인자 처리나 프로그램 종료 등의 작업에 유용합니다.

주요 기능

  • 명령줄 인자 읽기: sys.argv
  • Python 버전 확인: sys.version
  • 프로그램 강제 종료: sys.exit()

실습 예제

import sys

# 명령줄 인자 출력
print(f"명령줄 인자: {sys.argv}")

# Python 버전 확인
print(f"Python 버전: {sys.version}")

# 프로그램 강제 종료
print("프로그램 종료 전")
sys.exit()
print("이 코드는 실행되지 않습니다.")  # 출력되지 않음

 

 


3. datetime - 날짜와 시간 처리

datetime은 날짜와 시간 관련 작업을 할 때 사용됩니다. 초보자가 알아야 할 기본 기능은 날짜/시간 확인과 포맷팅입니다.

주요 기능

  • 현재 날짜/시간 가져오기: datetime.now()
  • 날짜 포맷 변환: strftime()
  • 날짜 계산: timedelta

실습 예제

from datetime import datetime, timedelta

# 현재 날짜와 시간
now = datetime.now()
print(f"현재 시간: {now}")

# 날짜 포맷 변환 (YYYY-MM-DD)
formatted_date = now.strftime("%Y-%m-%d")
print(f"포맷팅된 날짜: {formatted_date}")

# 날짜 계산 (3일 후)
future_date = now + timedelta(days=3)
print(f"3일 후의 날짜: {future_date.strftime('%Y-%m-%d')}")

 

 


4. collections - 효율적인 데이터 구조

collections 모듈은 데이터 관리에 유용한 다양한 자료 구조를 제공합니다. 초보자에게 추천하는 기능은 Counter와 defaultdict입니다.

주요 기능

  • Counter: 데이터 개수를 손쉽게 셀 수 있음
  • defaultdict: 키가 없는 경우에도 기본값을 제공

실습 예제

from collections import Counter, defaultdict

# Counter로 데이터 개수 세기
data = ["apple", "banana", "apple", "orange", "banana", "banana"]
count = Counter(data)
print(f"데이터 개수: {count}")

# defaultdict로 기본값 설정
fruit_count = defaultdict(int)
fruit_count["apple"] += 1
fruit_count["banana"] += 2
print(f"기본값 활용: {fruit_count}")

 

 


5. itertools - 반복문 최적화

itertools는 반복문을 효율적으로 처리할 수 있도록 다양한 함수들을 제공하는 라이브러리입니다. 수학적인 조합, 순열, 데카르트 곱 등을 간편하게 생성할 수 있어 복잡한 반복 작업을 단순화할 수 있습니다. 이 모듈은 특히 대규모 데이터나 반복 작업을 다룰 때 유용합니다.

주요 기능

  • product(): 두 개 이상의 리스트의 모든 가능한 조합(데카르트 곱)을 생성합니다.
  • permutations(): 주어진 요소들의 순열을 생성합니다.
  • combinations(): 주어진 요소들에서 중복 없이 조합을 생성합니다.

실습 예제

import itertools

# 두 리스트의 모든 조합 생성
combinations = itertools.product(["A", "B"], [1, 2])
for combo in combinations:
    print(combo)
    
# product 실행결과
('A', 1)
('A', 2)
('B', 1)
('B', 2)

# 'ABC'의 길이 2짜리 순열 생성
perms = itertools.permutations("ABC", 2)
for perm in perms:
    print("".join(perm))

# permutations 실행결과
AB
AC
BA
BC
CA
CB

# 'ABC'에서 2개를 선택하는 조합 생성
combs = itertools.combinations("ABC", 2)
for comb in combs:
    print("".join(comb))

# combinations 실행결과
AB
AC
BC

 

 


6. functools - 고급 함수 도구

functools는 고차 함수(higher-order function)와 관련된 강력한 도구를 제공합니다. 이 모듈을 활용하면 함수를 효율적으로 구성하거나 최적화할 수 있습니다. 자주 사용하는 함수 몇 가지와 함께 예제를 살펴보겠습니다.

주요 기능

  • lru_cache: 결과를 캐시하여 성능 최적화
  • partial : 함수의 인자를 고정하여 새로운 함수 생성
  • reduce - 반복 가능한 객체를 누적 처리
  • singledispatch - 함수의 인자 타입에 따라 다르게 동작하는 단일 분배 함수
  •  

실습 예제

import functools

@functools.lru_cache(maxsize=None)  # 모든 호출 결과를 캐시
def fibonacci(n):
    if n < 2:
        return n
    return fibonacci(n - 1) + fibonacci(n - 2)

for i in range(10):
    print(f"fibonacci({i}) = {fibonacci(i)}")

# lru_cache 실행결과
fibonacci(0) = 0
fibonacci(1) = 1
fibonacci(2) = 1
fibonacci(3) = 2
fibonacci(4) = 3
fibonacci(5) = 5
fibonacci(6) = 8
fibonacci(7) = 13
fibonacci(8) = 21
fibonacci(9) = 34



# int 함수의 base 인수를 2로 고정
binary_to_int = functools.partial(int, base=2)

print(binary_to_int("1010"))  # 2진수 '1010'을 10진수로 변환
print(binary_to_int("1111"))  # 2진수 '1111'을 10진수로 변환

# partial 실행결과
10
15


numbers = [1, 2, 3, 4, 5]

# 리스트의 모든 요소를 곱함
result = functools.reduce(lambda x, y: x * y, numbers)
print(f"Result of multiplication: {result}")

# reduce 실행결과 : reduce는 리스트 [1, 2, 3, 4, 5]의 모든 요소를 순차적으로 곱해 120을 반환합니다. 1 * 2 * 3 * 4 * 5 = 120이 됩니다.
Result of multiplication: 120

 

 

from functools import singledispatch

@singledispatch
def process_data(data):
    print(f"Unsupported type: {type(data)}")

@process_data.register(str)
def _(data):
    print(f"Processing string: {data.upper()}")

@process_data.register(int)
def _(data):
    print(f"Processing integer: {data * 10}")

@process_data.register(list)
def _(data):
    print(f"Processing list: {', '.join(map(str, data))}")

process_data("hello")
process_data(5)
process_data([1, 2, 3])
process_data(3.14)


# singledispatch 실행결과 : singledispatch를 사용하면 인자의 타입에 따라 함수가 다르게 동작합니다. 문자열, 정수, 리스트는 각각 다른 처리를 받지만 float는 기본 함수가 호출됩니다.
Processing string: HELLO
Processing integer: 50
Processing list: 1, 2, 3
Unsupported type: <class 'float'>

 


마무리

이번 글에서는 Python 개발자가 반드시 알아야 할 7가지 내장 라이브러리를 살펴보았습니다. 이 라이브러리들은 Python 개발을 효율적이고 강력하게 만들어주는 도구입니다. 초급자부터 중급자까지 누구나 쉽게 사용할 수 있는 기능들이며, 실제 프로젝트에서도 자주 사용됩니다.

 

다시 한 번 요약해보면:

  1. os: 파일 시스템과 운영 체제와의 상호작용
  2. sys: Python 인터프리터와 명령줄 인자 관리
  3. datetime: 날짜와 시간 처리
  4. collections: 효율적인 데이터 구조 제공
  5. itertools: 반복 작업을 최적화
  6. functools: 고급 함수 도구 제공

이 라이브러리들을 자유롭게 활용할 수 있게 되면, Python 개발자로서의 역량이 한층 더 성장하게 될 것입니다. 이제 이 라이브러리들을 직접 사용해 보고, 다양한 프로젝트에 응용해 보세요. 반복적인 코드 작성이 줄어들고, 더 깔끔하고 효율적인 코드를 작성할 수 있을 것입니다.

Python의 내장 라이브러리는 그 자체로 강력한 도구입니다. 이 도구들을 잘 활용하면 더 복잡하고 다양한 문제를 쉽고 빠르게 해결할 수 있습니다. 앞으로도 꾸준히 학습하고 실습하며 Python의 진정한 힘을 경험해 보세요! 🚀

반응형