### Что нужно знать заранее * Базовый Python (синтаксис, операции). * Немного знакомы с Flask. ### Что вы получите от курса Курс состоит из двух больших частей: 1. **Глубже в Python**Сравним Python с Java и C/C++. Разберём объекты, декораторы и как язык работает «под капотом». 2. **Web и Flask**Начнём с модуля `socket`, разберём HTTP-запросы вручную. Поймём, как на самом деле устроены фреймворки вроде Flask. В конце вместе спроектируем, напишем и (теоретически) задеплоим сервис сокращения ссылок. Сделаем акцент именно на тех частях, которые важны SRE. ### Что НЕ входит Глубокие внутренности Python и продвинутые фичи. ### Что понадобится Последняя версия Python. ### Содержание курса 1. **The Python Language** 1. Some Python Concepts 2. Python Gotchas 2. **Python и Web** 1. Sockets 2. Flask 3. **The URL-Shortening App** 1. Design 2. Scaling The App 3. Monitoring The App ### The Python Language Давайте сравним Python с Java и C/C++, которые вы, скорее всего, уже знаете. Вы слышали: * C/C++ — **компилируемый** язык * Python — **интерпретируемый**Но всё немного не так. #### Compiled vs Interpreted **Python на самом деле тоже компилируется!**В нём есть встроенный компилятор. Пример: ```bash echo "print('hello world')" > hello_world.py python3 hello_world.py python -m dis hello_world.py ``` Вы увидите **байт-код** (точно как .class в Java): ``` 0 LOAD_NAME 0 (print) 2 LOAD_CONST 0 ('hello world') 4 CALL_FUNCTION 1 6 POP_TOP 8 RETURN_VALUE ``` Разница: * **Java** — строгий статический язык → компилятор ловит ошибки типов ещё до запуска. * **Python** — динамический → компилятор «глупее», проверяет типы только во время выполнения. Но шаг компиляции есть всегда (просто он скрытый). #### Как запускаются программы | Язык | Что производит компилятор | Что запускает код | | ---- | ------------------------- | ----------------- | | C/C++ | машинный код (нативный бинарник) | ОС напрямую | | Java | байт-код (.class) | JVM (виртуальная машина) | | Python | байт-код (.pyc) | Python VM (CPython, Jython и др.) | Вот как это выглядит: ``` hello_world.py → COMPILE → Python bytecode hello_world.c → COMPILE → машинный код Python VM Process ← читает байт-код и выполняет построчно Новый процесс ОС ← сразу запускает машинный код ``` Важные моменты: 1. Когда вы пишете `python hello_world.py`, VM запускается, компилирует и выполняет — всё в одном шаге. 2. Бинарники C/C++ не запускаются «прямо так» — ОС делает ещё кучу работы (ELF, загрузка и т.д.), но это уже на уровне системы.