PYTHON 2026 RETRO

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


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


# Запуск без GIL (экспериментально)
# python3.13t --disable-gil heavy.py