Senior Python Developer
46.7K subscribers
1.97K photos
3 videos
1 file
485 links
№ 4931117861
Публикуем интересные/полезные фичи/библиотеки языка.

По вопросам сотрудничества: @adv_and_pr

Канал на бирже:
https://telega.in/c/seniorpy
Download Telegram
Argcomplete

Argcompleteэто библиотека для автодополнения аргументов командной строки.
Она позволяет легко добавить автодополнение для argparse в интерактивных оболочках (например, bash, zsh).

Библиотека работает в разных оболочках (bash, zsh и др.) без изменения кода и обладает простой интеграцией — достаточно декорировать функцию argparse декоратором @argcomplete.register.

Основные возможности argcomplete:
— Автоматическое дополнение имен файлов и каталогов при вводе путей.
— Предложение вариантов для аргументов на основе возможных значений, описанных через argparse.
— Дополнение для подкоманд в приложениях с вложенной структурой команд.
#вопросы_с_собеседований
Что делать если нужно сериализовать данные, которые не поддерживаются стандартным модулем json?

Если нужно сериализовать объекты, которые по умолчанию не поддерживаются модулем json, то есть несколько вариантов:

— Реализовать методы __getattr__ и __setattr__ в классе объекта, чтобы преобразовать его в словарь, который уже можно сериализовать в JSON.

— Использовать декоратор dataclass из модуля dataclasses для автоматической генерации методов сериализации.

— Создать собственный класс-наследник json.JSONEncoder и переопределить метод default(), чтобы указать как сериализовать нестандартные объекты.

— Использовать библиотеку marshmallow для создания схем сериализации/десериализации сложных объектов в JSON.

— Преобразовать объекты в dict или list вручную перед сериализацией с помощью методов объекта или отражения (reflection).

— Использовать другой формат сериализации, например YAML или MessagePack, который может поддерживать произвольные типы.
#вопросы_с_собеседований
Что такое сериализация?

Сериализация — это процесс преобразования объектов в поток байтов для сохранения или передачи.
Это позволяет сохранить состояние объекта в файл или базу данных и восстановить его позже.

Основные преимущества сериализации:
— Сохранение и восстановление объектов между сессиями программы.
— Передача объектов по сети между приложениями и машинами.
— Преобразование объектов в формат хранения, независимый от платформы.
Атрибут __all__

Атрибут __all__ используется для контроля того, какие элементы модуля экспортируются при импорте с помощью from module import *.
Этот атрибут должен содержать список имен, которые будут экспортированы.

Если __all__ не определен, то при импорте будут экспортированы все имена, не начинающиеся с _.

Использование __all__ позволяет явно указать автору модуля, какие части модуля являются публичным API, а какие — внутренней реализацией.
Это способствует лучшей структуре кода и предотвращает неожиданный экспорт внутренних элементов модуля.

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

#это_база
Plumbum

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

Основные возможности библиотеки:
— Удобный синтаксис для запуска команд и программ из Python кода. Позволяет вызывать команды командной строки так же просто, как обычные функции.
— Автоматическое формирование командной строки. Можно передавать аргументы и параметры в виде обычных переменных, Plumbum сам сформирует командную строку.
— Перенаправление ввода/вывода. Поддержка стандартных операторов Unix для работы с потоками данных.
— Проверка кодов возврата и обработка ошибок.
— Локальное или удаленное выполнение. Возможность запускать команды как локально, так и по SSH на удаленных хостах.
Pyspark

Pyspark — это библиотека для работы с Apache Spark на языке Python. Она позволяет выполнять распределенные вычисления на кластерах и обрабатывать большие объемы данных.

Основные возможности Pyspark:
Pyspark автоматически распределяет данные и вычисления между узлами кластера для максимальной производительности.
— В Pyspark есть специальные типы данных (RDD, DataFrame, Dataset), которые позволяют удобно работать с табличными и структурированными данными.
— Поддержка чтения и записи в разные хранилища данных и форматы файлов.
— Встроенные алгоритмы машинного обучения для классификации, кластеризации, регрессии.
— Интуитивно понятный API, позволяющий применять Pyspark вместе с другими популярными библиотеками Python для анализа данных.

Таким образом, Pyspark используется для быстрой параллельной обработки больших объемов данных с помощью кластеров, что делает его очень полезным инструментом для big data и машинного обучения.
#вопросы_с_собеседований
Что будет, если декоратор не возвращает ничего?

Если декоратор не возвращает ничего, то происходит следующее:
— Декоратор заменяет оригинальную декорируемую функцию на значение None.
— При попытке вызвать декорированную функцию произойдет ошибка AttributeError, поскольку None не является вызываемым объектом.
— Выполнение декорируемого кода на самом деле не происходит.
— Декоратор фактически "срывает" работу декорируемой функции, делая ее невызываемой.

Чтобы этого избежать, декоратор обязательно должен возвращать некоторое вызываемое значение — либо оригинальную функцию, либо другую функцию-обёртку.
Таким образом, не возвращая ничего декоратор нарушает ожидаемое поведение и "ломает" декорируемый код.
#вопросы_с_собеседований
Что такое модульное программирование?

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

Основные преимущества модульного программирования:
— Повышение читаемости и понятности кода, так как каждый модуль отвечает за определенную функциональность.
— Возможность многократного использования модулей в разных частях программы.
— Упрощение тестирования и отладки, поскольку каждый модуль можно тестировать отдельно.
— Возможность распараллеливания разработки за счет разделения труда в команде.
— Упрощение поддержки и модернизации кода за счет его модульности.
Функция zip()

Функция zip() принимает в качестве аргументов последовательности (списки, кортежи и т.д.) и возвращает итератор с кортежами из элементов этих последовательностей.

Итератор возвращает кортежи, содержащие i-й элемент из каждой из последовательностей. Количество элементов в итоговом итераторе равно длине самой короткой последовательности.

zip можно использовать для "сшивания" вместе данных из нескольких списков. Например, имена и фамилии из двух списков можно комбинировать в один список имя-фамилия.
Результатом zip является итератор, который можно превратить в список или кортеж. Также на результат можно применять различные операции, такие как цикл for.

zip используется вместе с распаковкой кортежей, чтобы присвоить элементы нескольких итераторов переменным в цикле.

#это_база
Функция sorted

sorted() используется для сортировки элементов в списке, кортеже или другой последовательности.
Она возвращает новый отсортированный список или итератор, не изменяя исходную последовательность.

По умолчанию сортировка выполняется в возрастающем порядке. Для сортировки в убывающем порядке нужно указать аргумент reverse=True.
Для сортировки по определенному ключу можно использовать ключевой аргумент key. Он принимает функцию, которая извлекает ключ для сортировки из каждого элемента.

Для сортировки объектов можно использовать атрибуты объекта в качестве ключа сортировки.
Сортировка происходит на месте для списков, и создаётся новый отсортированный список для кортежей и других неизменяемых последовательностей.

#это_база
Click

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

Возможности:
— Определение команд и групп команд с помощью декоратора @click.command().
— Декларативное описание аргументов и опций.
— Автоматический парсинг аргументов командной строки.
— Генерация help сообщения.
— Поддержка bash/zsh автодополнения.
— Вложенные команды и группы подкоманд.
— Цветной вывод в терминал.

Click широко используется для создания консольных утилит, CLI интерфейсов для web фреймворков, DevOps инструментов, скриптов автоматизации и других задач, где требуется командная строка.
Библиотека Typer

Typerэто библиотека для создания командных интерфейсов приложений на Python.
Она позволяет легко создавать CLI приложения с поддержкой аргументов, опций, субкоманд и автоматической генерацией help.

Основные возможности Typer:
— Декоратор @typer.command() для определения команд и подкоманд.
— Автоматический парсинг аргументов и опций.
— Валидация и tipped annotations для аргументов и опций.
— Автоматическая генерация help с описаниями.
— Встроенная поддержка Click для обратной совместимости.

Typer часто используется для создания утилит командной строки, CLI интерфейсов для python приложений, API клиентов, DevOps инструментов и других задач, где нужен простой и удобный интерфейс командной строки.
#вопросы_с_собеседований
Что такое коллизия?

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

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

Чтобы решить проблему коллизий, в Python используются разные стратегии, например:
— Цепочки: списки элементов внутри ячейки таблицы.
— Открытая адресация: подбор следующей свободной ячейки.
— Перехеширование: генерация нового хеша при коллизии.

Уменьшение коллизий позволяет повысить производительность операций с хеш-таблицами и словарями.
Точка входа в программу

Конструкция if __name__ == '__main__' используется для того, чтобы определить, запущен ли файл модуля напрямую или импортирован из другого модуля.

Эта конструкция позволяет запустить какой-то код только при прямом вызове модуля, так как name будет равно 'main' только если модуль запущен напрямую.

Это позволяет запускать программу полностью только когда она основная, а не импортируется в качестве модуля.

#это_база
#вопросы_с_собеседований
В каких случаях можно обработать SyntaxError?

SyntaxError
это исключение, которое генерируется интерпретатором при обнаружении ошибки в синтаксисе кода.

Обработать это исключение можно в следующих случаях:

— При разборе и выполнении кода, сгенерированного пользователем в приложении (например, в песочнице).
— При динамическом изменении и выполнении кода с помощью eval() или exec().
— В REPL оболочках для обработки ошибок в интерактивном режиме.
— В инструментах для проверки и валидации кода на корректность синтаксиса.
— В интерпретаторах и компиляторах для информирования пользователя об ошибке.
— В системах автодополнения кода для обработки некорректного синтаксиса.
— В средствах отладки и трассировки для выявления ошибок в выполняемом коде.
#вопросы_с_собеседований
Что такое подгенератор (subgenerator)?

Подгенератор создается с помощью конструкции yield from внутри генератора.

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

Механизм передает значения между генераторами без сохранения всей последовательности в памяти и блокирует основной генератор до полного завершения подгенератора.
Статические методы в Python

Статические методы - это методы, которые не требуют создания экземпляра класса для вызова.
Они не имеют доступа к атрибутам и другим методам экземпляра класса и объявляются с помощью декоратора @staticmethod.

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

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

#это_база
manim

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

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

Результат выполнения кода из примера — видеофайл с анимацией данных преобразований.
EEL

EEL (Easy Electron)
это библиотека, которая упрощает создание desktop-приложений с использованием технологий веб-разработки (HTML, CSS и Javascript).

Основные возможности EEL:

— Позволяет создавать графический интерфейс приложения при помощи веб-технологий.
— Обеспечивает взаимодействие между Python кодом и Javascript кодом. Python может вызывать JS функции, а JS может вызывать Python.
— Автоматически обрабатывает асинхронные вызовы между JS и Python.
— Встроенный локальный веб-сервер для отображения HTML/JS интерфейса.

В этом примере импортируется модуль eel и инициализируется папка с HTML и JS файлами — 'web'.
Декоратор @eel.expose делает функцию say_hello() доступной для вызова из Javascript.
Вызов eel.say_hello() вызывает эту функцию из Python кода.
Breakpoint

Breakpoint - это точка останова в коде, которая используется для отладки при помощи интерактивного отладчика.

breakpoint ставится в строке кода, где нужен останов для проверки значений. При достижении breakpoint программа приостанавливается, после чего  можно изучить ее состояние.

При выполнении код остановится на строке с breakpoint(), позволяя изучить текущие x и y.

#это_база