이번에는 '파이썬 함수의 종류와 활용법'에 대해 정리해 보려고 합니다.

절차적 프로그래밍의 단점을 극복하고, 코드의 재사용성과 유지보수성을 극대화하기 위해 함수는 선택이 아닌 필수입니다.
기본적으로 제공되는 내장 함수부터, 데이터를 다루는 고급 내장 함수,
그리고 외부 패키지를 활용하는 방법까지 알아보겠습니다.
1. 파이썬 내장 함수 (Built-in Functions)
파이썬을 설치하면 별도의 설정 없이 바로 사용할 수 있는 강력한 함수들입니다.
1) 파일 I/O (입출력) 함수
파이썬 프로그램이 외부의 파일(리소스)과 통신하기 위해 사용합니다. 데이터의 연속된 흐름인 '스트림(Stream)'을 열고, '파일 포인터'를 반환받아 해당 파일을 제어하게 됩니다.
- 목적: 파일 읽기, 쓰기, 생성, 추가 등 (텍스트 및 바이너리 데이터 모두 가능)
- 특징: 로컬 PC뿐만 아니라 네트워크 외부 리소스에도 접근할 수 있습니다. 외적 요인의 영향을 받으므로 예외 처리(Exception Handling)가 필수적입니다.
⚠️ 가장 중요한 습관: 열었으면 반드시 닫아라! 파일을 다루다 에러가 발생하거나 코드가 길어지면 close()를 누락하기 쉽습니다. 이로 인한 메모리 누수나 파일 잠금 현상을 막기 위해 파이썬에서는 with 문을 적극 권장합니다.
# ❌ 기본 방식 (close 누락의 위험이 있음)
f = open('a.txt', 'w')
f.write('hello world')
f.close()
# ✅ 권장 방식 (with 문 사용 - 블록이 끝나면 자동으로 close 됨)
with open('a.txt', 'w', encoding='utf-8') as f:
f.write('ab AB 12 가나 !@')
# 파일 읽기
with open('a.txt', 'r', encoding='utf-8') as f:
print(f.read())
💡 추가 지식 (Pro-Tip): > 텍스트 파일을 다룰 때는 위 코드처럼 encoding='utf-8'을 명시해 주는 것이 좋습니다. 특히 한글 데이터가 포함된 경우, OS 환경(Windows 등)에 따라 글자가 깨지는 현상을 미연에 방지할 수 있습니다. (실무 데이터 모델 덤프나 프롬프트 캐싱 시 필수적입니다!)
2) 컬렉션 데이터 처리: map() 과 filter()
리스트나 튜플 같은 연속된 데이터(Iterable)를 다룰 때, for 문 없이도 데이터를 우아하고 빠르게 가공할 수 있게 해주는 마법 같은 함수들입니다.
① map() 함수
연속된 데이터에서 멤버를 하나씩 꺼내어 특정 함수(작업)를 일괄 적용한 뒤 반환합니다.
datas = [1, 2, 3, 4, 5]
# 기존 리스트의 멤버를 2배로 확장하려면? (단순 datas * 2 는 리스트 자체가 2번 반복될 뿐입니다)
def 더블함수(x):
return 2 * x
# map(적용할 함수, 대상 데이터)
result = list(map(더블함수, datas))
print(result) # [2, 4, 6, 8, 10]
💡 추가 지식: 파이썬 3부터 map과 filter는 결과를 즉시 메모리에 올리지 않고 필요할 때마다 하나씩 꺼내주는 제너레이터(Iterator) 객체를 반환합니다. 그래서 눈으로 결과를 확인하거나 리스트로 쓰려면 반드시 list()로 감싸주어야 합니다.
이름 없는 고속 함수: 람다(Lambda)
위의 더블함수처럼 한 번 쓰고 버릴 간단한 로직이라면 lambda를 사용하는 것이 훨씬 빠르고 간결합니다. 콜백(Callback) 함수 자리에 단골로 등장합니다.
# 람다 함수를 활용한 map 적용 (가장 많이 쓰이는 패턴)
print(list(map(lambda x: 2 * x, datas)))
# 물론 파이썬의 꽃, 리스트 컴프리헨션이 속도면에서는 약간 더 우세합니다.
print([x * 2 for x in datas])
② filter() 함수
이름 그대로 조건에 맞는 데이터만 '추출(Extract)'하여 걸러냅니다.
콜백 함수의 결과가 True (혹은 불리언으로 평가되는 값)인 경우만 남깁니다.
# 짝수 데이터만 필터링하기 (람다 활용)
# 파이썬에서 0은 False이므로, not x % 2 는 짝수일 때 True가 됩니다.
print(list(filter(lambda x: not x % 2, datas)))
# 리스트 컴프리헨션으로 구현한다면?
print([x for x in datas if not x % 2])
2. 외장(부) 함수 및 패키지 (External Modules)
파이썬 기본 내장 함수만으로는 한계가 있습니다.
수학, 데이터 분석, 머신러닝 등을 위해 전 세계 개발자들이 만들어둔 외부 패키지를 가져와(import) 사용할 수 있습니다.
import os
print(len(dir(os))) # os 모듈이 제공하는 함수 및 속성 개수 확인
import numpy as np # 데이터 분석의 필수 라이브러리 (별칭 np로 주로 씀)
nums = np.arange(10)
print(nums)
패키지 설치 도구 (pip vs uv)
외부 패키지는 OS 환경에 먼저 설치를 해야 합니다.
- pip: 파이썬 초기부터 사용된 가장 강력하고 표준적인 패키지 관리자입니다.
- uv: 최근 급부상하고 있는 Rust 언어 기반의 패키지 관리자입니다. pip 대비 속도가 10~100배가량 빠르고 캐싱 효율이 압도적이라 실무 환경에서 점차 도입이 확산되고 있습니다.
# 터미널이나 주피터 노트북 환경에서 패키지 설치
!pip install pymysql
pickle: 파이썬 객체 그대로 저장하고 불러오기
데이터를 텍스트가 아닌 바이너리 형태로 직렬화(Serialization)하여 저장합니다.
파이썬의 리스트, 딕셔너리 구조뿐만 아니라 학습이 완료된 딥러닝/머신러닝 모델을 덤프(저장)할 때 매우 유용합니다.
import pickle
datas = [1, 2, 3, 4, 5]
# 1. 객체 저장 (Dump) - 바이너리 쓰기 모드 'wb' 사용
with open('test.pk', 'wb') as f:
pickle.dump(datas, f)
# 2. 객체 복원 (Load) - 바이너리 읽기 모드 'rb' 사용
with open('test.pk', 'rb') as f:
loaded_datas = pickle.load(f)
print(loaded_datas)
⚠️ 추가 지식 (보안 주의): pickle은 객체를 복원할 때 임의의 코드를 실행할 수 있는 취약점이 있습니다. 따라서 신뢰할 수 없는 외부(인터넷 등)에서 다운로드한 .pk 파일은 절대 로드해서는 안 됩니다. 단순히 데이터만 주고받을 때는 호환성이 높고 안전한 json 라이브러리를 사용하는 것을 권장합니다.
오늘의 한 마디
사람이 되고 싶은 혹은 하고 싶은 것이 있다면, 그것을 이미 달성한 것처럼 행동하다보면 그런 사람이 더 빨리 된다고 합니다. (물론 너무 망상증에 걸리면 문제겠지만요.) 아무튼 할 수 있다는 강한 믿음과 신념이 있다면 자신이 이루고 싶은 일을 이루는데 훨씬 도움이 된다니 오늘 당장 이루고 싶은 것을 다 이룬 것처럼 행동해 보는 것도 좋을 것 같습니다.
'코딩 개발 > Python' 카테고리의 다른 글
| Python - 모듈 (from, import) (0) | 2026.07.22 |
|---|---|
| Python - 함수 지향적 프로그래밍(feat. 숫자 맞추기 게임) (1) | 2026.07.21 |
| Python - 함수 (Function) (0) | 2026.07.17 |
| Python - 절차적 프로그래밍2 (숫자 맞추기 게임 만들기 step4 ~ step7) (0) | 2026.07.16 |
| Python - 절차적 프로그래밍1 (숫자 맞추기 만들기 step1 ~ step3) (0) | 2026.07.15 |