Python на примерах
1.39K subscribers
411 photos
6 videos
145 links
Короткие уроки Python на примерах
Download Telegram
PySimpleGUI

PySimpleGUI — это простая и легкая в использовании библиотека для создания графического интерфейса (GUI) в Python. Она предоставляет простые инструменты для создания оконных приложений с использованием графических элементов, таких как кнопки, текстовые поля, чекбоксы и др. PySimpleGUI предоставляет удобный интерфейс для создания GUI, особенно для начинающих разработчиков.

PySimpleGUI поддерживает различные стили и темы, и вы можете легко настраивать внешний вид вашего приложения. Вы можете найти дополнительные примеры использования PySimpleGUI на официальном сайте проекта.
👍2👎1
Импортируем пакеты

Что может быть проще? Но у Python есть несколько фишек, которые упростят работу с пакетами.

1. import <package> — просто импорт.

2. from <package> import <obj> — «вытаскивает» obj (функция, класс, переменная) из пакета. Можно импортировать всё, если написать на место <obj> звёздочку.

3. import <package> as <name> — импортирует модуль и задаёт имя, записанное после as. Работает и с from <package> import <obj> as <name>.

Последнее удобно использовать для совместимости или если у вас несколько модулей, которые работают одинаково.
👍1
Ищем жуков (bugs)

Функция подсчёта площади квадрата со стороной 5 должна возвращать 25. А если не вернёт? От таких простых ошибок защищает assert.

Если передаём оператору False, то получаем AssertionError с текстом из второго аргумента (если он есть, конечно).

Кстати, чтобы ускорить приложение, проверку можно отключить, запустив скрипт так: python3 -O foo.py.
Экранирование

Вы пытались запихнуть ' и " в строку? А сделать перенос на новую линию? Это сделать довольно сложно без экранирования (про multi-line строки пока не говорим).

Первый символ всегда будет , после идёт дополнительный, например: ' -> ', \ -> , n - перенос на новую строку, 0 - пустой символ (сишники поймут).
❤2
Модуль dis

Лучший способ узнать Python — залезть к нему под капот. Это и делает dis. Вернее, он даёт нам доступ к байт-коду.

Таким образом можно понять, каким образом Python оптимизирует код. Особенно интересно проверять с строками.
Немного про регулярные выражения

Регулярные выражения невероятно удобные. Но их просто невозможно читать, а уже тем более менять. Но есть решение!

Недавно наткнулся на статью, где гений-разработчик с помощью f-строк в разы упрощает работу с регулярными выражениями.
👍1
\b возвращает курсор вывода на один символ назад. А поскольку после него был ещё символ (a), то он просто перезаписался.

Постараюсь интерактивно показать, | это курсор. Первым делом вывелось a|, потом, за счёт \b, стало так: |a, и в результате получили c|.

Кстати, все такие символы можно тут найти.
Генераторные списки

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

Кстати, генерировать можно не только списки, но и множества, словари. А можно просто передавать функциям, по типу sum().
Модуль heapq

Нас интересуют только две функции: nlargest() и nsmallest(). Они позволяют получить n самых больших/маленьких значений в iterable.

В большинстве случаев функции быстрее чем sorted(iterable)[:n]. Их использование можно заметить в Counter.most_common().
Поговорим про del

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

Потом, если объект нигде больше не используется, сборщик мусора удалит его.

Ещё с его помощью можно убирать данные из списка, словаря.
👍2
Фокус с type

Все мы знаем, что type позволяет определять тип данных (строка это или, может, список). Но у него есть другая функция — создание типа.

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

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

Реализуется подобная фича с помощью встроенного модуля 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]).