Python на примерах
1.39K subscribers
411 photos
6 videos
145 links
Короткие уроки Python на примерах
Download Telegram
Тесты в документации

Такой подход интересен тем, что позволяет другому программисту понять как работает функция в определённых ситуациях, а вам — протестировать её работу.

Реализуется подобная фича с помощью встроенного модуля doctest. Он ищет текста, которые выглядят как интерактивные сеансы Python (>>>, ... и подобные символы).

Вы можете запускать тесты так же, как в примере, а можно с помощью терминала: python -m doctest -v example.py.
Правила документации

class Post:
"""На первой строке краткое описание объекта. После идёт пустая строка (это обязательно).

После идёт подробное объяснение. Кто он,
что он делает и какие параметры принимает.
Документировать можно в несколько абзацев.
Писать доки можно для всего: функции, класса, модуля.
можете почитать PEP257,
там разработчики рассказывают, как объяснять код.
"""
👍3
Интерпретатор умный

Перед запуском он проходится по файлу и смотрит на первые значения переменных (a = "string"), которые потом подставляет на месте повторений (если это неизменяемые типы данных).

Именно поэтому, когда вы выполняете код в интерактивном интерпретаторе и как файл, результат может отличаться.
👍1
Это спасёт вас от кучи багов

Просто знайте, что round(x) округляет x до ближайшего чётного числа, а не так, как мы привыкли (3.5 => 4; 2.5 => 3).

Если вам нужно, чтобы 2.5 округлялось до трёх, то посмотрите в сторону decimal с настройкой ctx.rounding = ROUND_HALF_UP
🤔2
Упрощаем работу с SQL

Автор FastAPI придумал SQLModel, который упрощает работу с базами данных. Он объединяет в себе Pydantic и SQLAlchemy.

Установка: pip install sqlmodel

Таким образом работу с движком БД мы перекладываем на SQLAlchemy, а обработку данных, проверку и перевод в нужный тип на Pydantic.

Кстати, библиотека хорошо работает с fastapi. Вряд-ли это из-за того, что автор один и тот же.
👍1
Перемещение файлов в Python

Для удобной манипуляции с файлами и папками в стандартной библиотеки Python существует специальный модуль shutil.

Функция shutil.move(source, destination) позволяет вам переместить любой файл или папку (даже непустую). Обратите внимание, что если destination — это уже существующая папка, то файл/папка будет перемещена внутрь неё, в остальных случаях файл/папка будут скопированы точно по нужному адресу.

В случае успеха, функция вернёт новое местоположение файла. Если destination существует и не является папкой, то будет выброшена ошибка.
❤1
Интерфейс командной строки

Самостоятельный парсинг аргументов даже с argparse вызывает трудности. Чтобы их избежать, стоит установить typer.

Установка: pip install typer

Это — интуинтивно понятный модуль для создания FAST API интерфейсов командой строки. Проще говоря, вы сможете создавать команды по типу git branch -b main.

Библиотека сама создаст usage и --help сообщения на основе документации используемых функций или переданных аргументов.

📌 Документация
raise ... from

Оператор может быть полезен при преобразовании исключений из одного типа в другой.

Также мы можем строить цепочку исключений, привязываю каждую новую ошибку к __clause__.

Подробнее о том, где используется raise from и в чём отличие от простого raise вы можете найти тут.
Python кэширует все импортированные модули в sys.modules

Это сделано ради оптимизации, чтобы каждый раз не выполнять модуль, а один раз его вытащить и использовать в проекте.

Чтобы его намеренно выполнить снова, воспользуйтесь importlib.reload(), но будьте осторожны, ведь это пересоздаст все объекты и создаст ошибки, которые сложно найти.
Что такое аннотация типов?

Аннотации типов (type hints) позволяют указать ожидаемые типы аргументов функций и возвращаемых значений. Они были введены в Python 3.5.

Аннотации типов не проверяются во время выполнения кода. Это просто подсказки для разработчиков и инструментов статического анализа кода.

Поддерживаются встроенные типы (int, float, str, bool и т.д.), а также классы, списки, словари и кортежи с указанием типов внутри.

Для необязательных аргументов используется Optional[] (например, Optional[int]).
Для возвращения нескольких типов можно использовать Union (например, Union[int, str]).
Что такое дескрипторы?

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

Для создания дескриптора нужно определить класс, который реализует хотя бы один из трех вышеуказанных методов. Затем экземпляры этого класса могут быть присвоены атрибутам других классов.
Гуглим с помощью Python

Установка необходимых пакетов — pip install beautifulsoup4 и pip install google.

В нашем примере мы задаем в поиске слово "Python" и получаем ссылки на 3 самых популярных по мнению Google сайтов о Python.
Memray

Memray - это библиотека для профилирования памяти и она является важным инструментом оптимизации производительности Python программ.

Библиотека отслеживает выделение и освобождение памяти при работе программы, поддерживает отслеживание ссылок на объект, применятся для профилирования на серверах и в виртуальных окружениях.

В примере мы используем декоратор memray.profile, который будет отслеживать все выделение и освобождение памяти внутри функции my_func().

При запуске этого кода memray выведет отчёт.
SpaCy

SpaCy — это библиотека для обработки естественного языка (NLP) на языке Python. Она предоставляет инструменты для сегментации текста, анализа грамматики, извлечения информации и многих других задач, связанных с обработкой текста.

Библиотека предоставляет множество инструментов для более сложных задач обработки текста, таких как анализ тональности, извлечение ключевых фраз, машинное обучение и многое другое. Подробнее про SpaCy
❤1
Метод isalpha()

Метод isalpha() является строковым методом, который позволяет проверить, состоит ли каждый символ в строке из букв (алфавитных символов). Он возвращает True, если все символы в строке являются буквами, и False в противном случае.

Как видно в примере выше, первая строка состоит только из букв, поэтому isalpha() возвращает True. Вторая строка содержит символы, которые не являются буквами (запятая и восклицательный знак), поэтому isalpha() возвращает False.
Please open Telegram to view this post
VIEW IN TELEGRAM
pyperclip

pyperclip — это библиотека Python, которая предоставляет простой способ копирования и вставки текста в буфер обмена (clipboard) операционной системы. Вы можете использовать pyperclip для копирования текста в буфер обмена и вставки текста из буфера обмена в свой Python-скрипт.

Для установки pyperclip, вы можете использовать инструмент управления пакетами Python, такой как pip. Откройте терминал или командную строку и выполните следующую команду:

pip install pyperclip

После установки библиотеки, вы можете использовать ее в своем Python-коде.
PySnooper

PySnooper
— это библиотека для отладки, которая позволяет логгировать каждую строку выполняемого кода вместе со значениями переменных. Она полезна, когда нужно понять, как работает код и где происходят изменения переменных.

Для использования необходимо декорировать функцию, которую нужно отладить с помощью @pysnooper.snoop(). Вид лога можно настроить с помощью параметров: variables — какие переменные отображать, depth — максимальная вложенность структур данных, prefix — префикс для каждой строки лога.

Результат использования pysnooper предоставлен на изображении.
❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
PySnooper

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

При выполнении функции из примера PySnooper будет записывать значения переменных и их изменения во время выполнения функции в стандартный вывод, что облегчает отладку. Вы также можете настроить PySnooper для записи данных в файлы и выполнять другие действия при отладке.
👍2❤‍🔥1🔥1🥰1
🔤🔤🔤 🔤🔤🔤🔤🔤🔤 🔤 🔤🔤🔤🔤🔤🔤 🔤🔤🔤🔤🔤🔤🔤 🔠🔠🔠

Ключевая идея: не загружать файл целиком — читать потоками, обрабатывать и сразу сохранять результат.

Pandas — удобный и практичный путь

for chunk in pd.read_csv("huge.csv", chunksize=100_000, usecols=["id","amount"], dtype={"id":str}):
chunk = chunk[chunk["amount"]>0]
chunk.to_csv("out.csv", mode="a", header=first, index=False)
first = False


— указывайте usecols, dtype и не парсите даты по умолчанию.

Низкоуровневый поток — минимальная память

import csv
with open("huge.csv", newline='') as r, open("out.csv","w",newline='') as w:
reader, writer = csv.DictReader(r), csv.DictWriter(w, fieldnames=["id","amount"])
writer.writeheader()
for row in reader:
writer.writerow({"id": row["id"], "amount": float(row["amount"])*0.012})


— идеально для простых построчных трансформаций и сжатия вывода.

Когда что выбирать

➖ Табличные операции (группировки, агрегации) → pandas + chunksize.
➖ Простая строковая трансформация, минимальная память → csv + генераторы.
➖ CPU-heavy обработка → chunksize + multiprocessing (но не накапливайте чанки в памяти).
➖ Для долгосрочного хранения/аналитики → конвертация в Parquet.

Быстрый чеклист перед запуском на полном файле

1️⃣. Протестировать на 1–10k строк.
2️⃣. Указать usecols и dtype.
3️⃣. Подобрать chunksize (50–200k — старт).
4️⃣. Не собирать результаты в списки; сразу писать на диск.
5️⃣. Логировать прогресс (номер чанка, время).
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤3🔥3