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

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

Канал на бирже:
https://telega.in/c/seniorpy
Download Telegram
#вопросы_с_собеседований
Что делать если нужно сериализовать данные, которые не поддерживаются стандартным модулем json?

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

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

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

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

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

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

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

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

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

Основные возможности argcomplete:
— Автоматическое дополнение имен файлов и каталогов при вводе путей.
— Предложение вариантов для аргументов на основе возможных значений, описанных через argparse.
— Дополнение для подкоманд в приложениях с вложенной структурой команд.
Библиотека yt-dlp

yt-dlpэто библиотека и утилита командной строки для скачивания видео с YouTube и других сайтов.

Основные возможности и применение yt-dlp:
— Поддерживает скачивание видео, аудио, плейлистов, каналов и др с YouTube. Помимо этого работает с сотнями других сайтов — Vimeo, Facebook, ВКонтакте, TikTok и др. Позволяет скачивать контент практически отовсюду.
— Извлечение метаданных и обложек видео.
— Конвертация медиафайлов в другие форматы после скачивания.
— Поддержка прокси и лимитов скорости.
— Множество настроек для извлечения данных, именования файлов, пост-обработки и т.д.
— Удобная утилита командной строки и модуль Python для автоматизации.
#вопросы_с_собеседований
Как Python ищет модули при импорте?

При импорте модулей интерпретатор следует определенному алгоритму поиска:

1. Сначала проверяются встроенные модули, которые поставляются в составе самого Python.

2. Затем по порядку просматриваются пути, перечисленные в sys.path — глобальной переменной, которая содержит список каталогов для поиска модулей.
По умолчанию в sys.path входят: текущий рабочий каталог скрипта, PYTHONPATH — каталоги указанные в этой переменной окружения, каталоги стандартной библиотеки Python.

3. Если модуль не найден — генерируется исключение ImportError.
#вопросы_с_собеседований
Что такое фабрика декораторов?

Фабрика декораторов — это особая разновидность функции высшего порядка, которая возвращает декоратор вместо прямого результата. Главное отличие фабрики декораторов от обычного декоратора в том, что она принимает аргументы, которые могут конфигурировать логику декоратора.

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

Главные преимущества фабрик декораторов — это возможность абстрагироваться от конкретики реализации, избежать дублирования кода и создавать интуитивный API для декораторов с настройками.
Функции, поддерживающие только именованные аргументы (kwargs)

**kwargs (keyword arguments) — это способ передачи произвольного количества именованных аргументов в функцию.

В функциях после позиционных и обычных именованных аргументов указывают параметр **kwargs.

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

Если одновременно используются *args и **kwargs, то в вызове сначала указываются *args.

#это_база
Атрибут __slots__

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

__slots__ определяется как список имен атрибутов в определении класса. Экземпляры класса с __slots__ могут иметь атрибуты только с именами, определенными в __slots__. Попытка создать новый атрибут приведет к ошибке.

Использование __slots__ экономит память, так как экземпляры не создают словарь __dict__ для атрибутов.

__slots__ не наследуются, для каждого подкласса нужно определять свои слоты.

Атрибут полезен, когда заранее известны все атрибуты класса и не нужна динамическая задача новых. Например, для простых данных или immutable классов.

#это_база
collections.MutableMapping

Collections.MutableMapping — это интерфейс, который представляет изменяемое отображение (словарь).
Он наследуется от интерфейса Mapping и добавляет методы для изменения отображения, такие как __setitem__, __delitem__ и clear.

Основное преимущество в использовании MutableMapping — это возможность передавать экземпляры такого класса в любое API, ожидающее словарь.
Например, во многих функциях в стандартной библиотеке есть параметры типа dict. Если создать класс, реализующий MutableMapping, его экземпляры можно будет передавать в такие функции.
collections.Counter

Collections.Counter — это класс, предназначенный для подсчета хешей (hashable объектов).
Он позволяет удобно и эффективно подсчитывать вхождения элементов в какой-либо последовательности.

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

Основные способы использования Counter:
— Подсчет слов или букв в тексте.
— Подсчет появления элементов в списке или итераторе.
— Нахождение наиболее часто встречающихся элементов.
— Использование при решении задач на вероятность и статистику.
#вопросы_с_собеседований
Что такое замыкание?

Замыкание (closure) — это функция, которая запоминает значения переменных из области видимости, в которой она была создана, и может получить к ним доступ, даже если она будет вызвана за пределами этой области видимости.

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

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

В Python замыкания реализуются элегантно и просто с помощью вложенных функций. Это мощный механизм, позволяющий писать короткий и чистый код.
#вопросы_с_собеседований
Что такое объект первого класса?

Объект первого класса (first-class object) — это объект, который можно использовать точно так же, как и любые другие объекты в этом языке.

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

В Python функции, классы, модули, типы и другие объекты являются объектами первого класса.
Это значит, что их можно динамически создавать, удалять, передавать как аргументы и возвращать из функций.
Метод isspace()

Метод isspace() проверяет, является ли символ пробельным.

Пробельными символами считаются:
— Пробел (' ').
— Табуляция ('\t').
— Перевод строки ('\n').
— Перевод каретки ('\r').
— Прочие unicode символы, определяемые как пробелы.

isspace() возвращает True, если символ пробельный, и False в противном случае.
Этот метод удобно использовать для проверки и обработки строк.

#это_база
Метод id()

Метод id() возвращает уникальный идентификатор объекта.

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

id() позволяет получить числовое представление идентификатора объекта. Это может быть полезно при отладке и тестировании программы.

#это_база
Библиотека xarray

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

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

В этом примере создана DataArray со случайными данными размерностей 2x3. Для осей заданы метки "city" и "year". Это позволяет легко обращаться к данным по городам и годам. Xarray сохраняет метаданные вместе с данными.
Библиотека igraph

igraph предназначена для работы с графами и сетями. Она позволяет строить, анализировать и визуализировать графы.

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

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

Главное отличие заключается в разделении памяти. Процессы независимы друг от друга, имеют раздельные адресные пространства, идентификаторы, ресурсы.

Треды исполняются в совместном адресном пространстве, имеют общий доступ к памяти, переменным, загруженным модулям.
#вопросы_с_собеседований
Что такое Green thread?

Green thread (зеленые треды) — легковесные треды внутри виртуальной машины.

Операционная система не видит их. С точки зрения ОС запущен один процесс виртуальной машины, а что внутри нее — неизвестно.

Такими тредами управляет сама виртуальная машина: порождает, исполняет, согласует доступ к ресурсам.
Метод Counter.elements()

Метод Counter.elements() возвращает итератор по элементам в словаре Counter.
Этот метод позволяет эффективно перебрать элементы словаря Counter без создания копии.

Как видно из примера, метод elements() возвращает итератор по элементам словаря Counter в порядке их добавления.
Это позволяет эффективно обрабатывать элементы, не создавая промежуточные структуры данных.

#это_база
Контекстные менеджеры

Контекстные менеджеры — это объекты, используемые для управления контекстом с помощью оператора with.

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

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

#это_база
Библиотека PyQt6

PyQt6 — это кроссплатформенная библиотека для создания графических пользовательских интерфейсов. Она позволяет разрабатывать приложения с графическим интерфейсом для desktop и mobile устройств.

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

PyQt6 широко применяется для разработки кроссплатформенных приложений под Windows, Linux и macOS.