Python은 간결하고 읽기 쉬운 문법을 가진 고수준 범용 프로그래밍 언어다. 1991년 Guido van Rossum이 발표했으며, "코드는 쓰는 것보다 읽히는 횟수가 훨씬 많다"는 철학 아래 가독성을 최우선으로 설계됐다. 웹 개발·데이터 과학·AI·자동화·블록체인 스크립팅 등 거의 모든 분야에서 사용된다.
핵심 특징
| 특징 | 설명 |
|---|
| 인터프리터 언어 | 별도 컴파일 없이 소스 코드를 직접 실행. CPython이 표준 구현체 |
| 동적 타입 | 변수 타입을 선언하지 않아도 되며 런타임에 결정됨 |
| 다중 패러다임 | 절차적·객체지향·함수형 프로그래밍 모두 지원 |
| 들여쓰기 블록 | 중괄호 대신 들여쓰기(스페이스 4칸)로 코드 블록 구분 |
| GIL | Global Interpreter Lock — 한 시점에 하나의 스레드만 Python 바이트코드 실행 |
| 배터리 포함 | 방대한 표준 라이브러리를 기본 제공 ("Batteries Included") |
| 타입 힌트 | Python 3.5+부터 선택적 정적 타입 어노테이션 지원 |
기본 자료형
| 자료형 | 특성 | 예시 |
|---|
| int / float | 숫자, 불변 | 42, 3.14, 5 ** 2 → 25 |
| str | 텍스트, 불변, 인덱싱·슬라이싱 가능 | 'Python', word[0:2] → 'Py' |
| list | 순서 있는 컬렉션, 가변 | [1, 2, 3], lst.append(4) |
| tuple | 순서 있는 컬렉션, 불변 | (1, 2, 3), 언팩: a, b = 1, 2 |
| dict | 키-값 쌍, 가변 | {'key': 'val'}, d['key'] |
| set | 중복 없는 집합, 가변 | {1, 2, 3}, s.add(4) |
| bool | True / False | True, False, 0은 False |
| NoneType | 값 없음 | None |
문자열 (str)
python
word = 'Python'
word[0] # 'P' — 인덱싱
word[-1] # 'n' — 음수 인덱싱 (뒤에서)
word[0:2] # 'Py' — 슬라이싱 [start:end) 끝 미포함
word[:2] # 'Py' — 처음부터
word[4:] # 'on' — 끝까지
len(word) # 6
# f-문자열 포매팅 (Python 3.6+, 권장)
name = 'World'
f'Hello, {name}!' # 'Hello, World!'
f'{2 ** 10}' # '1024'
리스트 컴프리헨션
python
# [표현식 for 변수 in 이터러블 if 조건]
squares = [x ** 2 for x in range(10)] # [0, 1, 4, 9, ...]
evens = [x for x in range(20) if x % 2 == 0] # [0, 2, 4, ...]
# 딕셔너리·집합 컴프리헨션
sq_dict = {x: x**2 for x in range(5)} # {0:0, 1:1, 2:4, ...}
sq_set = {x**2 for x in range(5)} # {0, 1, 4, 9, 16}
제어 흐름
if / elif / else
python
x = int(input('정수 입력: '))
if x < 0:
print('음수')
elif x == 0:
print('0')
else:
print('양수')
for / while
python
# for: 시퀀스 순회
for word in ['cat', 'window', 'defenestrate']:
print(word, len(word))
# range(): 숫자 시퀀스 생성 (끝값 미포함)
for i in range(0, 10, 2): # 0, 2, 4, 6, 8
print(i)
# enumerate(): 인덱스와 값 동시
for i, val in enumerate(['a', 'b', 'c']):
print(i, val)
# while
n = 10
while n > 0:
n -= 1
match (패턴 매칭, Python 3.10+)
python
def http_status(status):
match status:
case 200:
return 'OK'
case 404:
return 'Not Found'
case 400 | 401 | 403:
return 'Client Error'
case _: # 와일드카드 (default)
return 'Unknown'
# 구조 분해 패턴
match point:
case (0, 0): print('원점')
case (x, 0): print(f'X축: {x}')
case (0, y): print(f'Y축: {y}')
case (x, y): print(f'({x}, {y})')
함수
python
def greet(name: str, greeting: str = 'Hello') -> str:
"""이름과 인사말을 받아 문자열을 반환합니다."""
return f'{greeting}, {name}!'
greet('Alice') # 'Hello, Alice!'
greet('Bob', greeting='Hi') # 'Hi, Bob!'
매개변수 종류
python
def func(pos_only, /, normal, *, kwd_only):
# pos_only: 위치 인자 전용 (/ 앞)
# normal: 위치 또는 키워드
# kwd_only: 키워드 인자 전용 (* 뒤)
pass
def variadic(*args, **kwargs):
# *args: 가변 위치 인자 → 튜플
# **kwargs: 가변 키워드 인자 → 딕셔너리
for arg in args:
print(arg)
for key, val in kwargs.items():
print(f'{key}={val}')
# 언팩 호출
params = [3, 6]
list(range(*params)) # range(3, 6) 동일
d = {'voltage': 4000, 'state': 'dead'}
parrot(**d) # parrot(voltage=4000, state='dead') 동일
람다 (익명 함수)
python
double = lambda x: x * 2
double(5) # 10
# 정렬 키로 활용
pairs = [(1, 'one'), (2, 'two'), (3, 'three')]
pairs.sort(key=lambda pair: pair[1])
# [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]
객체지향 프로그래밍
python
class Animal:
def __init__(self, name: str, sound: str):
self.name = name # 인스턴스 속성
self._sound = sound # 관례적 비공개
def speak(self) -> str:
return f'{self.name} says {self._sound}'
def __repr__(self) -> str:
return f'Animal({self.name!r})'
class Dog(Animal): # 상속
def __init__(self, name: str):
super().__init__(name, 'Woof')
def fetch(self, item: str) -> str:
return f'{self.name} fetches {item}!'
dog = Dog('Rex')
dog.speak() # 'Rex says Woof'
dog.fetch('ball') # 'Rex fetches ball!'
주요 특수 메서드 (Dunder)
| 메서드 | 호출 시점 |
|---|
__init__ | 인스턴스 생성 시 |
__repr__ | repr(obj), 디버깅 출력 |
__str__ | str(obj), print() |
__len__ | len(obj) |
__getitem__ | obj[key] |
__iter__ | for x in obj |
__enter__ / __exit__ | with 문 (컨텍스트 매니저) |
예외 처리
python
try:
result = 10 / int(input('나누는 수: '))
except ZeroDivisionError:
print('0으로 나눌 수 없습니다')
except ValueError as e:
print(f'잘못된 입력: {e}')
else:
print(f'결과: {result}') # 예외 없을 때만 실행
finally:
print('항상 실행') # 예외 여부 무관
# 사용자 정의 예외
class InsufficientFundsError(Exception):
def __init__(self, amount: float):
super().__init__(f'잔액 부족: {amount}원 필요')
self.amount = amount
표준 라이브러리
Python의 "Batteries Included" 철학. 별도 설치 없이 사용 가능.
| 카테고리 | 주요 모듈 | 용도 |
|---|
| 텍스트 | re, string, textwrap | 정규표현식, 문자열 처리 |
| 데이터형 | datetime, collections, enum | 날짜, 컨테이너, 열거형 |
| 수학 | math, decimal, random, statistics | 수학 함수, 정밀 연산, 통계 |
| 파일·경로 | pathlib, os, shutil, glob | 파일 시스템 조작 |
| 직렬화 | json, csv, pickle, sqlite3 | 데이터 저장·교환 |
| 암호화 | hashlib, hmac, secrets | 해시, HMAC, 안전한 난수 |
| 네트워크 | urllib, http.client, socket, ssl | HTTP, 소켓 통신 |
| 동시 실행 | threading, multiprocessing, asyncio | 병렬·비동기 처리 |
| 개발 도구 | typing, unittest, doctest, pdb | 타입 힌트, 테스트, 디버깅 |
| 런타임 | sys, os, gc, warnings | 시스템 인터페이스 |
가상 환경과 패키지 관리
bash
# 가상 환경 생성 및 활성화
python -m venv .venv
source .venv/bin/activate # macOS/Linux
.venv\Scripts\activate # Windows
# pip: 패키지 설치
pip install requests # 단일 패키지
pip install -r requirements.txt # requirements 파일
pip list # 설치된 패키지 목록
pip freeze > requirements.txt # 현재 환경 저장
주요 서드파티 라이브러리
| 분야 | 라이브러리 |
|---|
| 웹 개발 | FastAPI, Django, Flask |
| 데이터 분석 | pandas, NumPy, polars |
| 머신러닝 | PyTorch, TensorFlow, scikit-learn |
| HTTP 클라이언트 | requests, httpx |
| 비동기 | aiohttp, asyncpg |
| 테스트 | pytest, hypothesis |
| 타입 검사 | mypy, pyright |
코딩 스타일 (PEP 8)
Python 커뮤니티 공식 스타일 가이드.
python
# 들여쓰기: 스페이스 4칸 (탭 금지)
# 줄 길이: 79자 이내
# 함수·변수: snake_case
# 클래스: UpperCamelCase
# 상수: UPPER_CASE
def calculate_area(width: float, height: float) -> float:
"""직사각형 넓이를 계산합니다."""
return width * height
class Rectangle:
MAX_SIZE = 10000 # 상수
def __init__(self, width: float, height: float) -> None:
self.width = width
self.height = height
블록체인에서의 Python 활용
Python과 유사한 문법을 가진 이더리움 스마트 컨트랙트 언어. Solidity보다 단순하고 보안성을 강조. Curve Finance가 주요 컨트랙트 언어로 채택.
python
# Vyper 예시
balances: HashMap[address, uint256]
@external
def transfer(_to: address, _amount: uint256):
assert self.balances[msg.sender] >= _amount
self.balances[msg.sender] -= _amount
self.balances[_to] += _amount
2. 블록체인 데이터 분석
python
from web3 import Web3
w3 = Web3(Web3.HTTPProvider('https://mainnet.infura.io/v3/KEY'))
balance = w3.eth.get_balance('0x...')
block = w3.eth.get_block('latest')
tx = w3.eth.get_transaction('0xTX_HASH')
3. 주요 블록체인 라이브러리
| 라이브러리 | 용도 |
|---|
| web3.py | 이더리움 블록체인 상호작용 |
| brownie | Solidity/Vyper 개발·테스트 프레임워크 |
| ape | 모던 이더리움 개발 프레임워크 |
| ccxt | 100+ 거래소 API 통합 |
관련 개념
- •스마트 컨트랙트 — Python(Vyper)으로 구현 가능
- •Solidity — EVM 계열 대표 컨트랙트 언어 (비교 대상)
- •DeFi — Curve 등 Python(Vyper) 기반 DeFi 프로토콜
- •JavaScript — 웹 프론트엔드 중심 동적 언어 (비교 대상)
참고문헌
- 1.Python Software Foundation. (2024). The Python Tutorial. Python 3.14 Docs.
- 2.Python Software Foundation. (2024). The Python Standard Library. Python 3.14 Docs.
- 3.van Rossum, G. et al. PEP 8 – Style Guide for Python Code. https://peps.python.org/pep-0008/
- 4.web3.py 공식 문서
- 5.Vyper 공식 문서