배꼽파지 않도록 잘 개발해요

방송대 오픈소스기반데이터분석 - 3강. 데이터 분석을 위한 파이썬 프로그래밍 2 본문

방송대 컴퓨터과학과/오픈소스기반데이터분석

방송대 오픈소스기반데이터분석 - 3강. 데이터 분석을 위한 파이썬 프로그래밍 2

꼽파 2025. 9. 18. 20:40

1. 파이썬 문법 요소

2. 함수형 프로그래밍


1. 파이썬 문법 요소

1) 언패킹

  • 정의: 시퀀스(리스트, 튜플, 문자열 등)의 요소를 개별 변수로 나누어 할당.
  • 문법 형식
변수1, 변수2, ..., 변수n = 시퀀스
변수1, 변수2, *변수n = 시퀀스   # 확장 언패킹
  • 활용:
    • 함수 반환값 여러 개를 동시에 할당 가능
    • 나머지 값들을 *로 묶어 처리 가능
# 기본 언패킹
x, y = (3, 7)
print(x, y)   # 3 7

# 리스트 언패킹
r, g, b = [120, 200, 150]
print(r, g, b)   # 120 200 150

# 확장 언패킹
first, *middle, last = [1, 2, 3, 4, 5]
print(first, middle, last)  # 1 [2, 3, 4] 5

 

2) 언더스코어

 

  • 의미: 특별한 의미 없이 “무시할 값”을 받거나 반복문에서 필요 없는 변수를 대체할 때 사용.
  • 활용:
    • 반복문에서 인덱스가 필요 없는 경우
    • 언패킹 시 특정 값 무시

 

# 반복문에서 사용
for _ in range(3):
    print("Hello")

# 언패킹에서 무시
student = (2025, "김철수", "컴퓨터과학", 3.9)
_, name, _, grade = student
print(name, grade)  # 김철수 3.9

 

3) 예외 처리 (Exception Handling)

  • 예외(Exception): 실행 중 발생하는 오류
  • 목적: 프로그램 강제 종료 방지, 사용자 경험 개선, 누수 방지
  • 구문: try-except, 필요시 finally 사용
# 기본 예외 처리
try:
    num = int(input("숫자 입력: "))
    print(10 / num)
except ZeroDivisionError:
    print("0으로 나눌 수 없습니다.")
except ValueError:
    print("유효한 숫자를 입력하세요.")
finally:
    print("작업 종료")   # 예외와 상관없이 실행

 

  • 특징:
    • 여러 예외를 개별 처리 가능
    • finally: 파일 닫기, 네트워크 종료 등 자원 정리 필수 코드 작성에 유용

2. 함수형 프로그래밍

1) 개념과 특징

  • 정의: 절차적·객체지향 프로그래밍 외에, 파이썬이 지원하는 방식
  • 특징:
    • 데이터 변경 최소화
    • 순수 함수(Pure Function) 사용 → 같은 입력이면 항상 같은 출력
    • 부작용(Side Effect) 최소화 → 외부 상태 변경 억제
  • 장점:
    • 코드 가독성 향상
    • 디버깅 용이
    • 병렬 처리 효율적

 

2) 람다 함수 (Lambda Function)

 

  • 정의: 이름 없는 익명 함수, 단일 표현식으로 작성 가능
  • 특징:
    • return 생략 가능 (표현식 결과가 자동 반환됨)
    • 즉시 정의해서 사용할 때 유용

 

# 일반 함수
def add(x): 
    return x + 5

# 람다 함수
add_lambda = lambda x: x + 5
print(add_lambda(10))   # 15

 

3) map, filter, reduce

  • 반복문 없이 데이터 변환/선별/축소를 수행하는 함수형 프로그래밍 도구

map 

  • 모든 요소에 함수를 적용 → 새 리스트 반환
nums = [1, 2, 3, 4]
squares = list(map(lambda x: x**2, nums))
print(squares)  # [1, 4, 9, 16]

 

filter

  • 조건을 만족하는 요소만 추출
nums = [10, 15, 20, 25]
evens = list(filter(lambda x: x % 2 == 0, nums))
print(evens)  # [10, 20]

 

reduce

 

  • 누적 연산을 통해 하나의 값으로 축소
  • functools 모듈 필요

 

from functools import reduce

nums = [3, 5, 7]
total = reduce(lambda x, y: x + y, nums)
print(total)  # 15
구분 map( ) filter( ) reduce( )
작용 방식 모든 요소에 함수 적용 조건을 만족하는 요소만 선택 요소들을 순차적으로 축소
입력-출력 관계 N개의 입력 → N개의 출력 N개의 입력 → M개의 출력 (M ≤ N) N개의 입력 → 1개의 출력
사용 사례 데이터 변환(매핑) 데이터 필터링 누적 연산(합계, 곱 등)
예시 리스트의 각 숫자를 제곱 리스트에서 짝수만 추출 리스트의 모든 숫자 곱하기

요약

  • 언패킹: 시퀀스 요소를 변수로 분리, *로 확장 언패킹 가능
  • 언더스코어: 불필요한 값 무시, 반복문 변수 대체
  • 예외 처리: try-except-finally로 오류 안전 처리
  • 함수형 프로그래밍: 순수 함수 기반, 부작용 최소화, 병렬 처리 적합
  • 람다 함수: 간결한 익명 함수, 한 줄 정의 가능
  • map / filter / reduce: 데이터 변환, 조건 필터링, 누적 축소
728x90