Programming

Python

Python — интерпретируемый язык с динамической типизацией, ставший стандартом для скриптов, веб-бэкендов, анализа данных и машинного обучения.

Что такое Python

Python — интерпретируемый язык программирования с динамической типизацией, созданный Гвидо ван Россумом в 1991 году. Ставка сделана на читаемость: блоки выделяются отступами, синтаксис минимален, стандартная библиотека закрывает большую часть бытовых задач.

Где применяется:

  • Data Science и MLPyTorch, pandas, NumPy, scikit-learn. Здесь у Python фактическая монополия.
  • Веб-бэкенд — Django, FastAPI, Flask.
  • Автоматизация — от разбора логов до деплоя.
  • Парсинг — requests, BeautifulSoup, Scrapy.
  • БотыTelegram-боты на aiogram или python-telegram-bot.

Плата за удобство — скорость: чистый Python на порядки медленнее C. На практике это редко мешает, потому что тяжёлые части (NumPy, PyTorch) написаны на C/C++ и CUDA, а Python только ими управляет.

split — разбить строку

str.split() разбивает строку по разделителю и возвращает список:

"a,b,c".split(",")          # ['a', 'b', 'c']
"один два  три".split()     # ['один', 'два', 'три'] — по любым пробелам
"a,b,c".split(",", 1)       # ['a', 'b,c'] — не больше одного разбиения
"2026-07-17".split("-")     # ['2026', '07', '17']
"a\nb\n".splitlines()       # ['a', 'b'] — по строкам

Обратная операция — join, конкатенация элементов через разделитель:

",".join(["a", "b", "c"])   # 'a,b,c'

Две частые ловушки: "".split(",") возвращает [''], а не пустой список; split() без аргумента и split(" ") ведут себя по-разному на двойных пробелах.

map — применить функцию к каждому элементу

map(func, iterable) применяет функцию к каждому элементу и возвращает ленивый итератор:

list(map(int, ["1", "2", "3"]))        # [1, 2, 3]
list(map(str.upper, ["a", "b"]))       # ['A', 'B']
list(map(lambda x: x * 2, [1, 2, 3]))  # [2, 4, 6]
list(map(max, [1, 5], [3, 2]))         # [3, 5] — два итерируемых сразу

Ключевое слово — ленивый: пока результат не обёрнут в list() или не пройден циклом, не вычисляется ничего. Это экономит память на больших данных, но регулярно удивляет: «почему map ничего не напечатал».

В Python вместо map чаще пишут list comprehension — читается лучше:

[x * 2 for x in [1, 2, 3]]   # [2, 4, 6]

map остаётся уместен, когда функция уже есть и лямбда не нужна: map(int, values) короче и быстрее, чем [int(v) for v in values].

pandas — таблицы в памяти

pandas — библиотека для работы с табличными данными. Базовый объект — DataFrame: таблица со строками, именованными колонками и типами.

import pandas as pd

df = pd.read_csv("orders.csv")
df = df[df["amount"] > 1000]                    # фильтр
df["month"] = df["created_at"].str[:7]          # новая колонка
stats = df.groupby("month")["amount"].sum()     # агрегация
df.to_parquet("orders.parquet")                 # выгрузка

По сути это SQL-подобные операции, но в памяти процесса. Отсюда главное ограничение: DataFrame целиком живёт в RAM и занимает в разы больше, чем исходный файл. Для десятков гигабайт берут Polars, DuckDB или Spark.

Python на сервере (VDS/VPS)

Скрипты, парсеры и боты обычно живут на VPS — им не нужен GPU, хватает 1 vCPU и 1 ГБ RAM. Схема запуска:

python3 -m venv .venv                 # изолированное окружение
source .venv/bin/activate
pip install -r requirements.txt

Дальше — юнит systemd, чтобы процесс поднимался после перезагрузки и падений. Веб-приложение ставят за Gunicorn/WSGI и Nginx. ML-нагрузка переезжает на сервер с GPU, где решает не частота CPU, а объём VRAM.

Связанные термины

Готовы запустить GPU-задачу?

Запустить GPU-сервер