Python 치트시트 — 빠른 레퍼런스
모던 Python 3 (3.11+) 문법, 내장 타입, 자주 쓰는 표준 라이브러리를 정리한 빠른 레퍼런스. 일상적인 필요의 약 80%를 다룹니다.
Python Python 3.11 (LTS 계열)
CPython · 다중 패러다임 (OOP · 함수형 · 절차형) · 동적 · 강한 타입 · 덕 타이핑
추천 학습 경로
먼저 python3 실행과 REPL 에 익숙해지고 → 변수, 내장 타입, 제어 흐름을 익히고 → 함수, 클래스, 예외를 깊이 다루며 → 표준 라이브러리로 파일/네트워크 I/O 를 작성하고 → 참조와 가변성(얕은/깊은 복사)을 이해한 뒤 → 필요에 따라 asyncio, 프로세스, 정규식을 익히고 → 마지막으로 venv/pip/pyproject 로 프로젝트 운영을 학습하세요. 함정을 피하기 위해 FAQ 섹션은 나중에 다시 보는 것이 좋습니다.
1.Hello World 및 빌드 환경
Python 실행, 대화형 REPL, 가상 환경, 패키지 관리 방법을 다룹니다.
최소 프로그램
print 가 콘솔에 출력합니다. Python은 들여쓰기로 블록을 구성하며 중괄호나 세미콜론이 없습니다.
실행 방법
python3 는 스크립트 실행, -c 는 문자열 실행, -m 은 모듈 실행을 담당합니다. 대화형 REPL은 즉시 평가합니다.
가상 환경
venv 는 프로젝트 의존성을 격리합니다. 활성화 후 pip 설치는 현재 환경에만 적용됩니다. 프로젝트마다 가상 환경을 사용하세요.
pip 패키지 관리
pip 으로 의존성을 설치/제거/동결합니다. 버전은 ==, 범위는 >=,<y 로 지정합니다.
pyproject.toml
현대 프로젝트 설정 파일: 의존성, 빌드 시스템, 도구 설정을 모두 pyproject.toml 에 둡니다.
Shebang 스크립트
#!/usr/bin/env python3 로 스크립트를 실행 가능하게 합니다. POSIX에서는 chmod +x 후 ./script.py 로 바로 실행할 수 있습니다.
REPL 상호작용
python3 로 REPL에 진입해 대화형으로 디버깅합니다. _ 가 마지막 결과를 보관하며 exit() 로 종료합니다.
__main__과 모듈
if __name__ == '__main__' 으로 직접 실행과 임포트를 구분합니다. 스크립트 실행/모듈 사용의 표준 관용구입니다.
2.변수와 타입 힌트
동적 타이핑, 타입 힌트, 다중 할당, 스코프, 왈루스 연산자를 다룹니다.
할당과 추론
변수 선언이 필요 없으며 할당이 곧 생성입니다. 타입은 동적으로 추론되고 언제든지 바뀔 수 있습니다.
타입 힌트
PEP 484 스타일 타입 힌트로, 콜론 뒤에 타입을 적습니다. 실행 시점에는 영향을 주지 않으며 힌트와 정적 검사에 쓰입니다.
다중 할당
a, b = b, a 로 한 줄에 값을 교환합니다. 확장 언패킹은 *rest 를 쓰며 개수가 일치해야 합니다.
상수 관습
Python 에는 상수 키워드가 없습니다. 모듈 레벨 상수는 ALL_CAPS 로 명명하는 것이 관례입니다.
스코프 LEGB
이름 탐색 순서는 Local → Enclosing → Global → Built-in 입니다. 함수 안에서 할당하려면 global 또는 nonlocal 선언이 필요합니다.
왈루스 연산자
:= 는 표현식 안에서 값을 할당하는 표현식 (Python 3.8+). 같은 계산의 반복을 피할 수 있습니다.
None과 불리언
None 은 값 없음을 나타냅니다. 진위는 if x 로 검사하고 if x == True 는 피하세요. 빈 컨테이너는 거짓입니다.
del과 가비지 컬렉션
del 은 변수 이름이나 컨테이너 요소를 제거합니다. 이름이 사라지고 객체의 참조 카운트가 1 줄어듭니다.
3.데이터 타입
내장 타입: 숫자, 불리언, 시퀀스, 매핑, 집합과 고급 타입 힌트.
숫자 타입
int 는 임의 정밀도, float 는 IEEE-754, complex 는 복소수입니다. bool 은 int 의 서브클래스이며 나눗셈은 두 가지 의미가 있습니다.
불리언과 None
True/False 는 첫 글자가 대문자이며 None 은 싱글톤입니다. and/or 는 단락 평가로 결정한 피연산자를 반환합니다.
시퀀스 타입
str/list/tuple 은 모두 시퀀스로 인덱싱·슬라이싱·반복이 가능합니다. str 과 tuple 은 불변입니다.
매핑 dict
dict 는 키/값 쌍을 저장하며 삽입 순서를 유지합니다. 키는 해시 가능해야 하고, .get 으로 안전하게 값을 얻습니다.
집합 타입
set 은 순서 없는 중복 없음 집합, frozenset 은 그 불변 버전입니다. 합집합·교집합·차집합 연산을 지원합니다.
바이트 타입
bytes 는 불변, bytearray 는 가변입니다. encode/decode 로 텍스트와 바이트열을 상호 변환합니다.
고급 타입 힌트
typing 모듈: Optional, Union, TypeVar, 제네릭 컨테이너. Python 3.10+ 부터는 | 문법도 쓸 수 있습니다.
덕 타이핑
「오리처럼 걷고 울면 오리다」: 타입이 아니라 동작을 봅니다. typing.Protocol 로 구조적 서브타이핑을 정의합니다.
4.참조와 가변성
Python의 객체 참조 의미: 가변/불변, 얕은 복사와 깊은 복사, 공유 참조 함정.
참조 의미
변수는 박스가 아니라 객체에 바인딩됩니다. 여러 이름이 같은 객체를 가리킬 수 있으며 할당은 바인딩을 다시 만드는 것입니다.
가변과 불변
가변 타입은 제자리에서 바뀝니다: list/dict/set. 불변: int/str/tuple/frozenset.
얕은 복사
copy.copy 는 얕은 복사로 외부 컨테이너만 새로 만들고 내부 요소는 공유합니다. 리스트 슬라이싱도 얕은 복사입니다.
깊은 복사
copy.deepcopy 는 모든 층을 재귀적으로 복제합니다. 중첩 가변 구조의 변경이 사본에 전파되지 않습니다. 비용에 주의하세요.
공유 참조 함정
같은 가변 객체를 공유하면 한 곳의 변경이 모두에 보입니다. 인자 전달도 참조에 의한 전달입니다.
is와 ==의 차이
== 는 값을, is 는 동일성(같은 객체 여부)을 비교합니다. None 비교에는 is None 을 사용합니다.
기본 매개변수 함정
가변 기본 인자는 정의 시 한 번 만들어져 호출 간에 공유됩니다. None 센티널을 쓰고 함수 내부에서 만드세요.
인터닝과 캐싱
작은 정수와 짧은 문자열은 인터닝으로 메모리를 절약합니다. 내용 비교에 is 를 쓰지 마세요.
5.제어 흐름
조건 분기, 루프, 패턴 매칭, 컴프리헨션.
if / elif / else
들여쓰기로 블록을 나눕니다. elif 로 다중 조건을 다루며 조건식은 임의의 진위 판정식이 될 수 있습니다.
패턴 매칭
match-case 는 구조적 패턴 매칭 (Python 3.10+). 모양으로 매칭하고 구조를 분해합니다.
for 루프
for 는 이터러블을 순회합니다. enumerate 는 인덱스, zip 은 병렬, dict.items() 는 키/값을 제공합니다.
while 루프
while 은 조건이 참인 동안 반복합니다. break 로 일찍 종료하고 무한 루프를 피하세요.
break와 continue
break 는 루프 전체를 종료하고 continue 는 현재 반복을 건너뜁니다. break 가 없으면 else 절이 실행됩니다.
컴프리헨션
리스트/딕셔너리/집합 컴프리헨션은 한 줄로 컬렉션을 생성합니다. 조건으로 필터링하고 표현식으로 변환합니다.
참/거짓 판정
if x 로 진위를 판정합니다. 0, '', [], None 은 거짓입니다. True/False 와의 명시적 비교는 피하세요.
반복 관용구
itertools 는 효율적인 반복 조합 도구를 제공합니다. groupby, chain, product 등.
6.함수
함수 정의, 매개변수 전달, 데코레이터, 제너레이터, 클로저.
함수 정의
def 로 함수를 정의하고 본문은 들여씁니다. return 으로 값을 반환하며 return 이 없으면 None 이 반환됩니다.
매개변수 종류
위치 인자, 키워드 인자, 기본값. 호출 시 위치와 키워드를 혼용할 수 있습니다.
*args와 **kwargs
*args 는 남는 위치 인자를 튜플로, **kwargs 는 남는 키워드 인자를 딕셔너리로 모읍니다.
익명 함수
lambda 는 한 줄짜리 익명 함수로, 정렬 키나 map/filter 같은 고차 함수에 자주 쓰입니다.
클로저
내부 함수가 외부의 변수를 잡아두고, 반환된 함수가 그 스코프를 기억합니다. 팩토리 함수에서 흔히 쓰는 패턴입니다.
데코레이터
@decorator 는 함수를 감싸 동작을 확장합니다. 코드 수정 없이 타이밍/로깅 등을 추가할 수 있습니다.
제너레이터
yield 는 값을 지연 생성합니다. 제너레이터는 값을 하나씩 흘려보내 대량 시퀀스를 메모리 친화적으로 다룹니다.
함수형 도구
map/filter/reduce/sorted 가 함수형 처리 도구이며 functools 가 partial 같은 도구를 제공합니다.
재귀
함수가 자기 자신을 호출합니다. 반드시 기저 사례를 두세요. CPython 의 재귀 깊이 한계는 약 1000 (sys.setrecursionlimit 으로 조정).
7.문자열
불변 str, f-string 포매팅, 자주 쓰는 메서드, 인코딩.
문자열 기초
작은따옴표/큰따옴표/삼중따옴표로 만들며 이스케이프 시퀀스가 적용됩니다. str 은 불변이며 연산은 새 문자열을 반환합니다.
자주 쓰는 메서드
upper/lower 는 대소문자, strip 은 공백 제거, split/join 은 분리·결합, startswith 는 접두사 판정.
f-string 포매팅
f"{var}" 로 표현식을 삽입합니다. 형식으로 정렬·정밀도·천 단위 구분을 제어하며 3.12+ 에서는 따옴표 재사용도 가능합니다.
format과 % 포매팅
str.format 은 위치/이름 플레이스홀더, % 연산자는 오래된 방식. 새 코드에서는 f-string 사용을 권장합니다.
분할과 결합
split 은 구분자로 분리, rsplit 은 오른쪽부터, partition 은 세 부분으로 분리, join 은 효율적으로 결합합니다.
트림과 패딩
strip/lstrip/rstrip 으로 공백을 제거하고, zfill 은 0 으로 채우고, center 는 가운데 정렬, removeprefix/removesuffix 는 3.9+.
Unicode와 인코딩
Python str 은 Unicode 코드 포인트의 시퀀스입니다. encode 로 바이트열, decode 로 다시 문자열, len 은 코드 포인트 수를 셉니다.
찾기와 바꾸기
find/index 로 찾기, replace 로 바꾸기, translate 로 테이블 치환, count 로 등장 횟수.
텍스트 줄바꿈
textwrap 는 텍스트 줄바꿈: wrap 으로 폭 지정, dedent 으로 공통 들여쓰기 제거, fill 로 단락화.
8.컬렉션과 컨테이너
list/dict/set/tuple 조작, collections 모듈, 정렬.
리스트 연산
append 는 끝에 추가, insert 는 삽입, remove 는 값으로 삭제, pop 은 끝/지정 위치 꺼내기, index 로 위치, count 로 개수.
딕셔너리 연산
값 가져오기는 .get, 병합은 update / |, 순회는 items, 값 기준 정렬, 중첩 접근.
집합 연산
합집합 |, 교집합 &, 차집합 -, 대칭차 ^. 멤버 판정은 O(1). 중복 제거에 적합합니다.
튜플 사용법
tuple 은 불변 시퀀스로, 다중 반환값·레코드·딕셔너리 키에 쓰입니다. namedtuple 은 필드가 있는 변형입니다.
collections 도구
Counter 는 집계, deque 는 양쪽 끝 큐, defaultdict 는 키 기본값, OrderedDict 는 순서 보존 딕셔너리입니다.
정렬
sorted 는 새 리스트를 반환하고 list.sort 는 제자리 정렬합니다. key 로 정렬 기준을 지정하고 reverse=True 로 역순.
슬라이스
seq[start:stop:step] 로 슬라이스합니다. 음수 인덱스는 끝에서 셉니다. 뒤집기·보폭·복사에 활용.
힙과 큐
heapq 는 우선순위 정렬, queue 는 스레드 안전한(우선순위) 큐를 제공합니다.
9.메모리와 성능
가비지 컬렉션, 참조 카운팅, 메모리 도구, 성능 최적화.
가비지 컬렉션
참조 카운팅이 기본이며 세대별 GC 가 순환 참조를 회수합니다. 직접 free 할 필요는 없습니다.
memoryview와 제로 카피
memoryview 는 버퍼를 복사 없이 뷰로 다룹니다. 대용량 바이너리 처리에 효율적입니다.
약한 참조
weakref.ref 는 참조 대상의 회수를 막지 않습니다. 큰 객체 캐시와 순환 참조 누수 방지 용도로 사용합니다.
__slots__로 메모리 절약
__slots__ 는 속성을 고정해 인스턴스당 __dict__ 를 없앱니다. 수백만 개의 작은 객체에서 메모리와 속도를 크게 개선합니다.
대용량 데이터 처리
큰 데이터는 청크 단위로, 반복은 지연 평가로 처리합니다. 한 번에 모두 읽지 말고 파일은 한 줄씩 스트리밍하세요.
프로파일링
cProfile 는 함수별 시간 분석, timeit 는 마이크로 벤치마크입니다. 병목을 찾은 뒤 최적화하세요.
성능 최적화 팁
로컬이 글로벌보다 빠르고 컴프리헨션이 루프보다 빠르며 집합 조회는 O(1). 루프의 무거운 계산은 바깥으로 빼세요.
흔한 메모리 오류
MemoryError (메모리 부족), RecursionError (스택 초과), 순환 참조 문제. 진단 도구도 함께 다룹니다.
10.클래스와 객체
class 정의, 상속, 던더 메서드, dataclass, enum.
클래스 기초
class 가 타입을 정의합니다. __init__ 이 초기화하고 self 가 인스턴스를 가리킵니다. 인스턴스 메서드는 인스턴스에 바인딩됩니다.
속성 접근
인스턴스 속성이 클래스 속성보다 우선합니다. setattr/getattr/hasattr 로 동적으로 접근하고 property 로 계산 속성을 만듭니다.
세 가지 메서드
인스턴스 메서드는 self, 클래스 메서드는 cls, 스태틱 메서드는 둘 다 갖지 않습니다. @staticmethod/@classmethod 로 장식합니다.
상속
서브클래스가 부모 메서드를 상속합니다. super() 로 부모를 호출하고 필요시 오버라이드합니다. 다중 상속은 MRO 를 따릅니다.
던더 메서드
이중 밑줄 메서드는 내장 동작을 커스터마이즈합니다: __repr__ 표시, __eq__ 동등, __len__ 길이, __add__ 더하기.
dataclass
@dataclass 는 __init__, __repr__, __eq__ 등을 자동 생성하는 선언적 데이터 클래스 작성법입니다.
Enum 열거형
Enum 은 이름 있는 상수 집합을 정의합니다. str, 자동 번호, 순회를 지원하며 매직 넘버를 대체합니다.
컨텍스트 관리자
with 가 자원을 관리합니다. __enter__/__exit__ 을 구현하거나 @contextlib.contextmanager 로 제너레이터로 작성합니다.
11.예외 처리
try-except, 예외 계층, 사용자 정의 예외, with 자원 관리.
try / except
예외를 잡아 오류를 처리합니다. except 는 타입별로 필터링하고 as e 로 예외 객체를 받습니다.
else와 finally
else 는 예외 없이 성공한 경우에만 실행되고, finally 는 성공/실패와 무관하게 실행되어 정리 작업에 적합합니다.
예외 계층
Exception 이 대부분의 예외 기본 클래스이며 ValueError, TypeError, KeyError, IndexError 가 대표적입니다.
사용자 정의 예외
Exception 을 상속해 도메인 예외를 정의하고 필드와 메시지를 담습니다. 호출 측은 타입으로 잡습니다.
raise와 체이닝
raise 로 능동적으로 던지고 raise ... from ... 로 원인을 연결합니다. except 안의 베어 raise 는 현재 예외를 그대로 다시 던집니다.
assert
assert 는 개발 중 불변 조건 검사입니다. python -O 로 비활성화되므로 사용자 입력 검증엔 절대 사용하지 마세요.
예외와 로깅
logging 은 스택트레이스와 함께 예외를 기록합니다. except 블록 안에서는 logger.exception 이 표준입니다.
오류 처리 패턴
EAFP (허락보다 용서를) vs LBYL (보면서 가기). 가드 절과 조기 반환으로 중첩을 줄입니다.
12.입출력
print/input, 파일 I/O, pathlib, JSON/CSV, 표준 스트림.
출력과 입력
print 는 여러 인자를 받으며 sep/end 로 구분과 끝을 제어합니다. input 은 한 줄을 str 로 읽습니다.
파일 읽기/쓰기
open 모드: r 읽기, w 쓰기, a 추가, b 바이너리. 읽기는 read/readline/readlines.
with와 파일
with 는 예외 발생 시에도 파일을 닫아 줍니다. 파일을 다룰 때의 표준 관용구입니다.
pathlib 경로
Path 는 플랫폼에 독립적인 경로(/, exists, mkdir, read_text 등) 연산을 제공하며 os.path 의 현대적 대체입니다.
JSON 읽기/쓰기
json.loads/dumps 로 직렬화하고 dict/list 를 JSON 과 상호 변환합니다. ensure_ascii=False 로 비 ASCII 문자를 그대로 유지합니다.
CSV 읽기/쓰기
csv 모듈은 쉼표로 구분된 데이터를 처리합니다. writer 로 쓰고 reader / DictReader 로 읽습니다.
표준 스트림
sys.stdin/stdout/stderr 로 파이프 데이터를 다루며 stdin 을 한 줄씩 처리합니다.
바이너리 I/O
바이너리 모드는 바이트열을 읽고 쓰며 struct 로 패킹/언패킹, seek/tell 로 랜덤 접근을 합니다.
13.일반적인 함정
Python 일상 개발에서 가장 자주 만나는 함정과 올바른 관용구.
가변 기본 인자
가변 기본 인자는 정의 시 한 번 만들어져 호출 간에 누적됩니다. None 센티널을 사용하세요.
is와 == 혼동
is 는 동일성, == 는 값을 비교합니다. 작은 정수/짧은 문자열은 인터닝될 수 있어 is 로 내용을 비교하지 마세요.
루프 클로저 함정
루프 안의 lambda 는 변수를 늦게 바인딩합니다. 지금 값이 필요하면 기본 인자로 캡처하세요.
문자열 결합
루프에서 += 결합은 O(n^2) 입니다. 리스트에 모아 join 하거나 io.StringIO 를 사용하세요.
반복 중 리스트 수정
반복 중 리스트를 변경하면 요소를 건너뛰거나 중복 처리합니다. 복사본을 순회하거나 새 리스트를 만드세요.
내장 이름 가리기
내장 이름을 변수로 쓰면 원래 함수를 가립니다. list, str, input, sum 등을 가리지 마세요.
예외 삼키기
베어 except 는 KeyboardInterrupt 까지 모두 삼킵니다. 최소한 로깅하거나 구체적인 타입으로 좁히세요.
전역 변수 오용
함수 안에서 할당하면 새 로컬이 만들어지고 전역은 바뀌지 않습니다. global 선언이 필요합니다.
복사와 정렬
list.sort 는 제자리 정렬, sorted 는 새 리스트를 반환합니다. 공유 참조에 의한 의도치 않은 변경에 주의.
14.동시성과 비동기
threading, asyncio, GIL, 동시성 모델 선택.
스레드 기초
threading.Thread 가 스레드를 만들고 start 로 실행, join 으로 대기, daemon=True 로 백그라운드 스레드를 만듭니다.
스레드 클래스
Thread 를 상속해 run 을 재정의합니다. 데이터 공유에는 락을 사용하고 작업 스레드를 깔끔히 묶을 수 있습니다.
락과 동기화
Lock 이 공유 자원을 보호하며 with lock 으로 획득/해제를 자동화합니다. RLock 은 동일 스레드 재진입을 허용합니다.
GIL과 병렬 처리
GIL 때문에 CPython 스레드는 CPU 바운드를 진짜 병렬화하지 못합니다. I/O 바운드에서는 여전히 유효합니다.
다중 프로세스
multiprocessing 가 CPU 바운드를 프로세스 풀로 병렬화하며 ProcessPoolExecutor 가 상위 래퍼를 제공합니다.
asyncio 기초
async def 가 코루틴, await 가 일시 중단, asyncio.run 이 이벤트 루프를 실행합니다.
async / await
async 가 코루틴을 정의하고 await 가 결과를 기다립니다. gather 로 병렬 실행, asyncio.timeout 으로 타임아웃을 설정합니다.
비동기 I/O
aiohttp / httpx 로 비동기 HTTP, aiofiles 로 비동기 파일 I/O 를 처리합니다. I/O 바운드에서 처리량이 크게 올라갑니다.
Executor
ThreadPoolExecutor 는 스레드 풀, ProcessPoolExecutor 는 프로세스 풀. 둘 다 submit / map 을 공통 API 로 제공합니다.
15.네트워크와 모듈
모듈 시스템, HTTP 요청, URL 처리, 서버.
모듈과 임포트
import 가 모듈을 적재하고 from x import y 는 특정 이름을 가져옵니다. 패키지는 __init__.py 가 있는 디렉터리입니다.
HTTP 요청
requests 라이브러리의 GET/POST, 쿼리 매개변수, 헤더, JSON 본문, 응답 상태 처리.
urllib 표준 라이브러리
urllib.request 는 서드파티 없이 쓰는 표준 HTTP 클라이언트이고 urllib.parse 는 URL 파서입니다.
간단한 HTTP 서버
http.server 는 정적 파일과 임시 서버를 제공하며 BaseHTTPRequestHandler 를 상속해 커스터마이즈합니다.
소켓 네트워크
socket 은 저수준 TCP/UDP 인터페이스로, 소켓 연결·송수신·프로토콜 분석에 사용됩니다.
URL과 매개변수
urlparse 가 URL 을 파싱, urlencode 가 쿼리 문자열을 만들고, quote 가 퍼센트 인코딩, urljoin 가 상대 경로를 해결합니다.
설정과 환경
os.environ 으로 환경 변수에 접근하고 python-dotenv 로 .env 를 로드합니다. 설정은 계층화해 관리합니다.
API 호출 패턴
재시도, 레이트 리미팅, 오류 처리를 래핑합니다. pydantic 으로 응답을 타입 검증하는 패턴이 흔합니다.
16.날짜와 시간
datetime, 포매팅, 시간 차이, 타임존.
datetime 기초
datetime 생성, date / time 서브클래스, 속성 접근, 비교 연산.
포맷과 파싱
strftime 로 포매팅하고 strptime 으로 파싱합니다. 지정자: %Y 년, %m 월, %d 일, %H 시.
timedelta
timedelta 로 일/시간 등 시간 차를 표현하고 더하기·빼기·차이 계산에 씁니다.
타임존
timezone 은 고정 오프셋, zoneinfo (3.9+) 는 IANA 이름의 타임존을 다룹니다. 저장은 UTC, 표시는 현지 권장.
타임스탬프
유닉스 초 타임스탬프를 .timestamp() 으로 얻고 fromtimestamp() 으로 복원합니다. 비교와 저장에 적합합니다.
타이밍과 대기
time.sleep 으로 대기, time.perf_counter 로 고정밀 측정, 정기 작업은 schedule 라이브러리 활용.
날짜 유틸
요일 판정, 월 초/월 말, 상대 날짜, 날짜 범위. calendar 모듈이 도움이 됩니다.
시간 구간 판정
특정 시각이 구간 안에 있는지, 구간이 겹치는지, 남은 시간을 판정합니다. 스케줄과 제한 시간 작업에서 자주 등장합니다.
17.프로세스와 시스템
subprocess, sys/os 모듈, 명령행 인자, 시그널.
subprocess
subprocess.run 으로 외부 명령을 실행하고 출력을 캡처하며 반환 코드와 타임아웃을 확인합니다.
sys 모듈
sys.argv 는 CLI 인자, sys.exit 는 종료 코드, sys.path 는 모듈 검색 경로, 표준 스트림 객체도 함께 다룹니다.
os 모듈
os 는 환경, 경로, 디렉터리 연산을 제공합니다. os.getcwd 는 현재 디렉터리, os.mkdir 는 생성.
명령행 인자 파싱
argparse 는 인자 파싱, 도움말 생성, 기본값을 제공합니다. CLI 도구의 표준입니다.
종료 코드
0 이 성공, 그 외는 실패. CI/스크립트는 종료 코드로 결과를 판정합니다. 처리되지 않은 예외는 기본 1.
파일과 프로세스
대용량 파일 처리, 파일 락, 임시 파일, 원자적 쓰기.
시그널 처리
signal 은 Ctrl+C 와 SIGTERM 을 처리해 정상 종료를 구현합니다. POSIX 중심이며 Windows 는 제한적입니다.
데몬과 백그라운드
백그라운드 실행, 로그 로테이션, 데몬화. supervisor 나 systemd 로 운영합니다.
18.정규식과 텍스트
re 모듈의 매칭, 검색, 치환, 그룹, 컴파일.
match와 search
re.match 는 시작 위치부터 매칭하고 re.search 는 전체에서 찾습니다. Match 또는 None 을 반환합니다.
findall과 finditer
findall 은 모든 매치를 리스트로, finditer 는 이터레이터로 하나씩 반환합니다(큰 입력에 메모리 친화적).
sub 치환
re.sub 은 정규식으로 치환하며 치환 문자열에서 \1 등을 참조하거나 함수를 넘겨 동적 치환도 가능합니다.
split
re.split 은 정규식으로 분리하며 여러 구분자, 캡처 보존, 분리 횟수 제한을 지원합니다.
그룹
() 는 캡처, (?P<name>) 는 이름 있는 그룹, (?:) 는 비캡처, | 는 선택입니다.
플래그
re.I 는 대소문자 무시, re.M 은 다중 행, re.S 는 점이 개행과 매칭, re.X 는 상세 모드.
자주 쓰는 패턴
이메일/전화번호/URL/IP/한글 등 자주 쓰이는 정규식 스니펫과 업무 포맷 검증.
정규식 성능
사전 컴파일, 재귀적 수량자에 의한 재앙적 백트래킹 회피, 수량자 폭 제한. 큰 텍스트는 청크로.
19.빌드와 엔지니어링
의존성 관리, 가상 환경, 테스트, Lint, CI.
requirements.txt
pip freeze 로 requirements.txt 를 생성하고 pip install -r 로 설치. 버전 고정으로 재현성을 확보합니다.
venv 실전
모범 사례: 프로젝트마다 1 개의 venv, .venv 는 커밋하지 않기, 손상되면 새로 생성.
모던 패키지 매니저
uv 는 초고속 의존성 관리, poetry 는 의존성과 패키징을 묶어 제공합니다. 락 파일로 재현성을 보장합니다.
pytest 테스트
test_ 로 시작하는 함수에 assert 를 씁니다. fixture 로 설정을 공유하고 parametrize 로 매개변수화합니다.
unittest 표준 라이브러리
표준 라이브러리 테스트 프레임워크. TestCase 를 상속해 assertXxx 메서드와 setUp / tearDown 라이프사이클을 사용합니다.
Lint와 포매터
ruff 로 빠른 Lint 와 포맷, black 으로 스타일, mypy 로 타입 검사. 규칙은 pyproject.toml 에 둡니다.
패키징과 배포
pyproject.toml 로 패키징을 설정하고 sdist/wheel 을 빌드한 뒤 twine 으로 PyPI 에 배포합니다.
CI와 배포
CI 단계: lint, 타입 검사, 테스트, 빌드. GitHub Actions 로 구성합니다.
이 치트시트에 대해
이 페이지는 Python 3.11 의 자체 포함형 빠른 레퍼런스로, 실제 프로젝트에서 일상적인 필요의 약 80%를 차지하는 언어 핵심과 표준 라이브러리를 다룹니다. f-string, 리스트 컴프리헨션, 제너레이터, 컨텍스트 관리자, 타입 힌트, dataclass 같은 모던 관용구와 collections, itertools, pathlib 같은 실용적인 표준 라이브러리 모듈을 중점적으로 살펴봅니다. Python 은 1991 년 Guido van Rossum 이 발표했으며 읽기 쉬운 문법과 "배터리 포함" 철학의 표준 라이브러리로 잘 알려져 있고, 데이터 분석, 머신러닝, 자동화 스크립트, 웹 개발(Django/FastAPI)에서 폭넓게 사용됩니다. 19 개 섹션은 각각 한 가지 주제에 집중합니다: 기본 문법, 변수, 타입과 참조 의미, 제어 흐름, 함수, 문자열, 리스트와 딕셔너리, 메모리와 참조 카운팅, 클래스와 OOP, 예외 처리, 입출력, 흔한 함정, 동시성(스레드/비동기), 네트워크, 시간, 프로세스, 정규식, 빌드 도구(pip/venv). 각 하위 섹션에는 짧은 개념 설명과 복사해 바로 쓸 수 있는 코드 스니펫이 함께 제공됩니다. 모든 코드와 텍스트는 브라우저에서 로컬로 렌더링되며 어떤 데이터도 기기를 떠나지 않습니다. 권위 있는 참고 자료는 Python 공식 문서입니다.
버전 2.1.0