PYTHON CHEAT SHEET
RETRO 2026 EDITION
Твой терминал-справочник эпохи free-threading и экспериментального JIT.
Python 3.13 (стабильный 2024–2025) + preview 3.14
ОСНОВЫ — 2025/26
Переменные & типы
name = "Юра" # str
age = 29 # int
score = 1337.42 # float
admin = True # bool
data = None # NoneType
f-строки + debug-фишка (3.8+)
print(f"{name=}") # name='Юра'
print(f"{age=:#x} {score=:.2f}") # age=0x1d score=1337.42
match-case (structural, 3.10+)
match action:
case "quit" | "exit":
print("Сеанс завершён")
case ["add", x, y]:
print(x + y)
case _:
print("SYNTAX ERROR")
КОЛЛЕКЦИИ
list / dict / set / tuple
lst = [1,2,3]; lst.append(4); lst += [5]
d = {"a":1}; d |= {"b":2} # merge 3.9+
s = {1,2,3}; s ^= {2,4} # symmetric diff
t = (10,20,30); a,b,*rest = t
dict.get() + defaultdict
from collections import defaultdict
cnt = defaultdict(int)
for c in "mississippi":
cnt[c] += 1
ФУНКЦИИ & МОДУЛИ
Современная сигнатура (3.10+)
def process(
data: list[int],
/, # positional-only
threshold: float = 0.5,
*,
verbose: bool = False # keyword-only
) -> dict[str, float]:
...
*args / **kwargs
def log(*msgs, level="INFO", **meta):
print(f"[{level}] {' '.join(map(str, msgs))} {meta}")
КЛАССЫ / OOP
Базовый класс + dataclass (рекомендуется 3.7+)
from dataclasses import dataclass
@dataclass(slots=True) # 3.10+ — экономия памяти
class User:
name: str
age: int = 0
active: bool = True
def greet(self) -> str:
return f"Привет, {self.name}!"
property / @cached_property (3.8+)
from functools import cached_property
class Expensive:
@cached_property
def heavy(self):
print("Долгий расчёт...")
return 42**10
TRY / EXCEPT
try:
val = int(input("→ "))
result = 1000 // val
except ValueError:
print("Не число, бро")
except ZeroDivisionError:
print("Деление на ноль → GAME OVER")
except Exception as e:
print(f"Критическая ошибка: {type(e).__name__}")
else:
print(f"OK → {result}")
finally:
print("Завершение блока")
ФАЙЛЫ I/O
with + encoding
# Запись
with open("log.txt", "w", encoding="utf-8") as f:
f.write("СЕАНС 2026-02-25\n")
# Добавление
with open("log.txt", "a", encoding="utf-8") as f:
f.write("Новая строка\n")
# Чтение
try:
with open("log.txt", encoding="utf-8") as f:
print(f.read())
except FileNotFoundError:
print("404 — ФАЙЛ НЕ НАЙДЕН")
STDLIB MUST-HAVE
- pathlib — современные пути вместо os.path
- json / tomllib (3.11+) — конфиги
- datetime / zoneinfo
- collections: defaultdict, Counter, deque
- itertools: chain, islice, batched (3.12+)
- contextlib: suppress, redirect_stdout
from pathlib import Path
from collections import Counter
root = Path(".")
print(list(root.glob("**/*.py")))
TYPE HINTS 2025+
Современный синтаксис (3.9–3.13)
# 3.9+ list[int]
# 3.10+ list[int] | None → int | str | None
# 3.12+ type Alias = int | str
# 3.13 улучшения более точные сообщения об ошибках типов
def fetch(id: int | str) -> dict[str, int | str] | None:
...
ДЕКОРАТОРЫ
def timer(func):
from time import perf_counter
def wrapper(*a, **k):
t0 = perf_counter()
res = func(*a, **k)
print(f"{func.__name__} → {perf_counter()-t0:.4f}s")
return res
return wrapper
@timer
def slow():
sum(range(10_000_000))
ГЕНЕРАТОРЫ
def fib(n: int):
a, b = 0, 1
for _ in range(n):
yield a
a, b = b, a + b
print(list(fib(15)))
generator expression
squares = (x*x for x in range(1_000_000) if x % 7 == 0)
ASYNC / AWAIT
import asyncio
async def fetch(url: str, delay: float = 1.2):
await asyncio.sleep(delay)
return f"Данные {url}"
async def main():
tasks = [
fetch("api1", 1.0),
fetch("api2", 0.7),
fetch("api3", 1.5)
]
results = await asyncio.gather(*tasks, return_exceptions=True)
print(results)
# asyncio.run(main()) # в .py файле
PYTHON 3.13 / 3.14 — что светит в 2026
- Новый REPL — подсветка, мультистрочность, история
- Free-threaded build (без GIL) — python3.13t --disable-gil
- Экспериментальный JIT — --enable-experimental-jit
- Улучшенные type checker сообщения
- Больше оптимизаций в Faster CPython
- batched() в itertools (3.12+)
# Запуск без GIL (экспериментально)
# python3.13t --disable-gil heavy.py