1. Фундаментальные основы Python и введение в веб-технологии
Фундаментальные основы Python и введение в веб-технологии
Python занимает лидирующие позиции в веб-разработке благодаря своей читаемости, мощной экосистеме и универсальности. Чтобы пройти путь от Junior до Senior, недостаточно просто знать синтаксис. Необходимо понимать, как язык работает с памятью, как взаимодействует с сетью и что лежит в основе обмена данными в интернете.
Архитектура и управление памятью в Python
Python — это интерпретируемый язык с сильной динамической типизацией. В отличие от компилируемых языков (как Go или C++), код на Python выполняется виртуальной машиной (PVM). Ключевая концепция: всё в Python является объектом.
Переменные и ссылки
Когда вы создаете переменную x = 10, Python не записывает значение 10 в ячейку памяти, названную x. Вместо этого происходят два процесса:
10 в памяти.x становится ссылкой (указателем) на этот объект.Это критически важно понимать при работе с изменяемыми (mutable) и неизменяемыми (immutable) типами данных, особенно при передаче аргументов в функции.
* Неизменяемые типы: int, float, str, tuple, bool.
* Изменяемые типы: list, dict, set.
Если вы передадите список в функцию и измените его внутри, он изменится и снаружи. Это частый источник багов у начинающих разработчиков.
!Работа ссылочной модели данных в Python
Алгоритмическая сложность структур данных
Веб-разработка требует работы с большими объемами данных. Выбор правильной структуры данных напрямую влияет на производительность сервера (RPS — Requests Per Second).
Рассмотрим поиск элемента. Для списка (list) поиск имеет линейную сложность, а для словаря (dict) — константную (в среднем).
Формула сложности поиска в списке:
где — «O» большое (обозначение верхней границы сложности), а — количество элементов в списке. Это значит, что время поиска растет пропорционально количеству элементов.
Формула сложности поиска в хэш-таблице (словаре):
где означает, что время выполнения не зависит от размера данных. Доступ происходит мгновенно по хэшу ключа.
> Понимание структур данных — это то, что отличает инженера от кодера. Используйте словари для быстрых лукапов (lookups), а списки — для упорядоченных последовательностей.
Основы протокола HTTP
Веб строится на архитектуре Клиент-Сервер. Основным языком общения между ними является протокол HTTP (HyperText Transfer Protocol).
Структура HTTP-запроса
Каждый запрос состоит из трех частей:
Пример расчета времени передачи данных по сети:
где — общее время передачи, — время круговой задержки (Round Trip Time), — размер передаваемых данных (в битах), — пропускная способность канала (в битах в секунду).
Этот расчет показывает, почему важно минимизировать размер передаваемых данных () и количество запросов (влияет на ).
WSGI: Мост между Python и Вебом
Сам по себе Python не умеет «слушать» HTTP-запросы так эффективно, как специализированные веб-серверы (Nginx, Apache). Чтобы Python-код мог работать с веб-сервером, был придуман стандарт WSGI (Web Server Gateway Interface).
WSGI — это просто соглашение о вызове. Веб-сервер вызывает Python-функцию (обычно называемую application), передает ей переменные окружения и функцию для начала ответа.
Пример простейшего WSGI-приложения без фреймворков:
Любой современный фреймворк (Django, Flask) внутри себя реализует именно такую функцию. Понимание WSGI позволяет вам осознать, как именно запрос попадает в ваш код.
Декораторы в веб-разработке
Одной из фундаментальных возможностей Python, активно используемой в вебе (например, во Flask или FastAPI), являются декораторы. Это функции, которые принимают другую функцию и расширяют её поведение без изменения её кода.
В веб-фреймворках декораторы используются для маршрутизации (routing) и проверки прав доступа.
Здесь @login_required автоматически добавляет логику проверки авторизации перед выполнением бизнес-логики get_dashboard.
Сериализация данных и JSON
В современном вебе (особенно в REST API) стандартом обмена данными является JSON (JavaScript Object Notation). Python имеет встроенную библиотеку json для сериализации (преобразования объектов Python в строку) и десериализации.
Соответствие типов:
| Python | JSON | | :--- | :--- | | dict | object | | list, tuple | array | | str | string | | int, float | number | | True/False | true/false | | None | null |
Важно помнить, что не все объекты Python можно сериализовать в JSON по умолчанию (например, объекты datetime или пользовательские классы требуют специальной обработки).
Для углубленного изучения тем, затронутых в статье, рекомендуется ознакомиться с материалами по основам языка и протоколу HTTP.