🧩 함수형 프로그래밍
- 순수 함수와 불변성을 중심으로 부수 효과를 최소화하는 프로그래밍 패러다임입니다.
- Python에서도 주요 기능을 지원합니다.
✨ 특징
- 순수 함수: 동일 입력 → 항상 동일 출력. 외부에 영향을 주지 않습니다.
- 불변 데이터: 데이터는 한 번 만들면 변경이 불가능합니다.
- 고차 함수: 함수를 인자로 받거나 결과로 반환합니다. (e.g.,
map
,filter
) - 지연 평가(Lazy Evaluation): 필요할 때까지 계산을 미룹니다. (e.g., 제너레이터)
📝 List Comprehension
- 기존 리스트로 새 리스트를 쉽고 빠르게 만드는 문법입니다.
for
문과append
를 쓰는 것보다 메모리, 속도 면에서 더 효율적입니다.
# 기본 구조
new_list = [수식 for 변수 in 반복가능객체 if 조건]
🛠️ 주요 내장 함수
map(func, iter)
: 모든 요소에 함수를 일괄 적용합니다. 결과는 이터레이터라 메모리 효율이 좋습니다.filter(func, iter)
: 조건 함수가True
인 요소만 걸러서 반환합니다.enumerate(iter)
: 순회할 때 인덱스와 값을 튜플로 같이 넘겨줍니다.start=1
처럼 시작값 지정이 가능합니다.zip(iter1, iter2)
: 여러 리스트를 같은 인덱스끼리 튜플로 묶어줍니다. 가장 짧은 리스트를 기준으로 합니다.reduce(func, iter)
: 모든 요소를 누적 계산해 하나의 값으로 축약합니다.functools
라이브러리에 있습니다.
⚡ Generator
yield
를 사용해 필요할 때마다 값을 하나씩 생성하는 함수입니다.- 전체 데이터를 메모리에 한 번에 올리지 않으므로 대용량 데이터 처리에 매우 효율적입니다. (지연 평가 방식)
def generate_squares(n):
for i in range(n):
yield i * i # 이 부분에서 멈췄다가 다음에 다시 호출되면 이어서 실행
squares = generate_squares(5)
print(next(squares)) # 0
print(next(squares)) # 1
📂 파일 입출력
with open(...) as f:
구문을 쓰는 것이 정석입니다. 블록이 끝나면 파일이 자동으로 닫힙니다.- 파일 모드:
r
(읽기),w
(쓰기, 덮어씀),a
(추가),rb
(바이너리 읽기) 등이 있습니다. - 읽기:
f.read()
(전체),f.readline()
(한 줄),f.readlines()
(모든 줄을 리스트로). - 쓰기:
f.write('내용')
,f.writelines(['줄1\n', '줄2\n
]).
💬 문자열 다루기
구분 | 메서드 | 설명 |
---|---|---|
대소문자 | upper() , lower() , capitalize() , title() |
전체/부분 대소문자 변경 |
검색/개수 | find() , count() , startswith() , endswith() |
특정 문자열 찾기, 개수 세기, 시작/끝 확인 |
변경/정리 | replace() , strip() , lstrip() , rstrip() |
문자열 교체, 양쪽/왼쪽/오른쪽 공백 제거 |
분리/결합 | split() , join() |
특정 기준으로 문자열 나누기 / 리스트를 문자열로 합치기 |
판단 | isalpha() , isdigit() , isalnum() |
문자인지, 숫자인지, 문자+숫자인지 확인 |
📦 Collections 모듈
- 파이썬 내장 자료형을 확장한 특수 컨테이너를 제공합니다.
Counter
: 요소의 개수를 딕셔너리 형태로 세 줍니다.most_common()
으로 빈도수 높은 값을 확인할 수 있습니다.deque
: 양쪽 끝에서 빠르게 추가/삭제(append
,pop
)가 가능합니다. 스택, 큐 구현에 최적입니다.defaultdict
: 키가 없을 때 미리 지정한 기본값을 반환해줘서KeyError
를 방지합니다.namedtuple
: 튜플의 각 자리에 이름을 붙여줘서 인덱스 대신 이름으로 접근할 수 있습니다. 코드 가독성을 향상시킵니다.
🔍 정규식(re) 모듈
- 복잡한 규칙을 가진 문자열 패턴을 찾거나, 바꾸거나, 나눌 때 사용합니다.
- 주요 함수:
re.match()
: 문자열 처음부터 패턴이 맞는지 확인합니다.re.search()
: 문자열 전체에서 패턴과 일치하는 첫 부분을 찾습니다.re.findall()
: 패턴과 일치하는 모든 부분을 리스트로 반환합니다.re.sub()
: 패턴과 일치하는 부분을 다른 문자열로 교체합니다.
- 꿀팁: 정규식 테스트는 https://regex101.com/ 에서 할 수 있습니다.