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

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

Канал на бирже:
https://telega.in/c/seniorpy
Download Telegram
#вопросы_с_собеседований
Как работает хэш-таблица?

Принцип работы:

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

LangChain
это библиотека, которая позволяет создавать цепочки обработки естественного языка (NLP).

Основные возможности:
— Создание конвейеров обработки текста.
— Подключение различных модулей NLP (токенизация, лемматизация и т. д.).
— Объединение моделей в единую цепочку.
— Удобная настройка и отладка.

Используется для:
— Построения приложений для анализа текста на Python.
— Быстрого прототипирования решений для обработки естественного языка.
— Объединения разных библиотек NLP в одном workflow.
— Упрощения процесса экспериментов с моделями обработки текста.

В этом примере создается цепочка из двух моделей OpenAI — Curie и Babbage, а текст передается поочередно в каждую модель.
#вопросы_с_собеседований
В чем смысл параметров _value, __value?

_value - одиночное подчеркивание в начале имени означает, что этот параметр не предназначен для использования outside функции. Это соглашение, а не ограничение языка.

__value - двойное подчеркивание означает, что это имя зарезервировано Python и используется для специальных целей, например init для конструктора класса. Такие параметры могут выполнять какие-то дополнительные действия.
Protocol

Класс Protocol - это способ формального определения протоколов, введенный в версии 3.8.

Этот класс дает строгий и типизированный способ определения протоколов и позволяет формально описать интерфейс.

Сейчас используется в основном в стандартной библиотеке.

На изображении предоставлен пример использования Protocol для определения простого протокола логгирования.
object

object - это встроенный класс, от него наследуются сразу все новые классы, если явно не указан другой базовый класс.

У объектов класса object есть методы init, str, repr и другие. Их можно переопределять в дочерних классах.

Атрибуты класса объявляются внутри класса, но вне всех методов. Атрибуты экземпляра объявляются в init.

Чтобы использовать класс object в своем коде, достаточно создать класс, унаследованный от object.
#вопросы_с_собеседований
Что такое сцепление исключений?

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

При возникновении исключения мы можем перехватить его блоком try/except и вызвать другое исключение из блока обработки.
При этом мы сохраняем исходное исключение как причину (cause) для нового.

Это дает следующие преимущества:

- При отлове нового исключения мы по-прежнему имеем доступ к стеку вызовов и данным исходного исключения.

- Можно добавлять дополнительную информацию в новое исключение, не теряя оригинальное.

- Иерархия исключений сохраняется - мы видим полную цепочку возникновения ошибки.
Memray

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

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

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

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

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

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

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

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

#это_база
Ruff

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

Ruff можно использовать для проверки как отдельных файлов, так и целых проектов.
#вопросы_с_собеседований
Как происходит проверка множеств на равенство?

- Для равенства множества должны содержать одинаковые элементы.

- Порядок элементов значения не имеет.

- Количество вхождений элемента также не важно.

- Если элементы в множествах разные - множества не равны.

- Другие атрибуты или свойства множеств, кроме состава элементов, не проверяются.

Таким образом, множества равны, когда они имеют одинаковые элементы, вне зависимости от порядка или количества вхождений.
Удаление префиксов и суффиксов

Методы .removeprefix() и .removesuffix() служат для удаления префикса или суффикса из строки соответственно. Эти методы были добавлены в Python 3.9.

Методы возвращают новую строку без указанного префикса или суффикса. Исходная строка не изменяется.

Если строка не начинается/заканчивается на указанный префикс/суффикс, возвращается копия исходной строки.

Методы вызывают исключение ValueError, если префикс/суффикс пустой.

#это_база
#вопросы_с_собеседований
Какие различия есть между методами для списков append() и extend()?

Методы append() и extend() для списков имеют разное назначение:

- append() добавляет один элемент в конец списка, принимая в качестве аргумента этот элемент.

my_list.append(10) - добавит число 10 в конец списка my_list.

- extend() расширяет список добавляя в него несколько элементов сразу. В качестве аргумента принимается итерируемый объект (список, кортеж и т.п.).

my_list.extend([10, 20, 30]) - добавит числа 10, 20, 30 в конец списка my_list.
Pygal

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

Этот код создает объект диаграммы line_chart, добавляет в нее несколько рядов данных, задает заголовок, подписи по оси X и сохраняет результат в файл SVG.

В итоге получается интерактивный график изменения доли браузеров за определенный период.
__repr__

В Python __repr__ является магическим методом, который определяет строковое представление объекта, которое используется для представления объекта при вызове функции repr() или при выводе объекта на консоль.

При вызове функции print() или print(repr()) будет вызван метод __repr__ для объекта и его строковое представление будет выведено на консоль.

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

В данном примере класс Book имеет атрибуты title, author и year, которые инициализируются при создании экземпляра класса. Метод __repr__ возвращает строку, представляющую объект Book в виде: Book(title='<название>', author='<автор>', year=<год>).
Fire

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

В этом примере мы определяем функцию hello, которая принимает один аргумент name со значением по умолчанию "World". Затем мы вызываем функцию Fire из библиотеки fire, передавая ей функцию hello в качестве аргумента. Это превращает функцию hello в интерфейс командной строки.

Теперь, если мы запустим этот скрипт из командной строки с аргументом --name=David, то увидим следующий вывод: Hello David!

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

Библиотека eli5 используется для анализа и интерпретации результатов моделей машинного обучения. Она работает с такими библиотеками, как: Scikit-learn, XGBoost, CatBoost, Keras, lightning и LightGBM.

В этом примере мы загружаем датасет Бостон из библиотеки sklearn, разбиваем его на обучающую и тестовую выборки и строим модель линейной регрессии.
Затем мы используем функцию show_weights из библиотеки eli5 для отображения весов линейной регрессии.

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

NamedTuples - это удобная структура данных, представляющая неизменяемые кортежи с именованными полями.
Они предоставляют удобный способ создания и использования простых объектов данных без необходимости определения собственных классов.

Для использования необходимо импортировать модуль collections из стандартной библиотеки Python. В этом модуле определен класс namedtuple(), который используется для создания именованных кортежей.

В приведенном примере создается именованный кортеж Point с полями x и y. Затем создается экземпляр p этого именованного кортежа с значениями 2 и 5 для полей x и y соответственно. Доступ к полям именованного кортежа осуществляется через их имена - p.x, p.y. Именованные кортежи являются неизменяемыми, поэтому попытка изменить значение поля приведет к ошибке. Также можно получить доступ к элементам по индексу, как в обычном кортеже. Метод _asdict() позволяет преобразовать именованный кортеж в словарь.
Voluptuous

Voluptuous — это библиотека для валидации данных. Она предназначена для валидации входящих данных в Python-приложениях, включая HTTP-запросы. Voluptuous также может быть использована для валидации структур данных, которые уже находятся внутри приложения.

В этом примере мы определяем схему, которая ожидает словарь с двумя ключами: 'name' и 'age'. 'name' является обязательным ключом, и его значение должно быть строкой длиной не менее 1 символа. 'age' не является обязательным ключом, но если он присутствует, его значение должно быть целым числом, не меньшим 18.

После определения схемы мы выполняем валидацию. Если данные проходят ее, то возвращаются без изменений. Если данные не проходят валидацию, библиотека Voluptuous генерирует исключение.
IceCream

IceCream — это библиотека, которая предоставляет простой и эффективный способ отладки кода. Вместо того чтобы использовать функцию print() для отладки, вы можете использовать функцию ic() из библиотеки IceCream, которая позволяет вам инспектировать переменные, выражения и выполнение программы с помощью одного простого вызова функции.

В этом примере кода вывод ic| указывает на то, что это вывод от IceCream, а result: 6 — имя переменной и ее значение.

IceCream может быть использован в любом месте, где требуется отладка кода: веб-разработка, научные вычисления, анализ данных и т.д.
Bottleneck

Bottleneck - это библиотека, которая ускоряет работу методов NumPy в 25 раз. Особенно, если массив имеет значения NaN.

В этом примере мы создаём 2D массив NumPy с 1000 строками и 10 столбцами со случайными значениями.

Далее функция move_mean используется для вычисления скользящего среднего для каждой строки в массиве. Параметр window указывает количество значений, которые будут использоваться при вычислении каждого скользящего среднего, а параметр axis указывает ось, вдоль которой будет вычисляться скользящее среднее (в данном случае мы вычисляем его для каждой строки, поэтому устанавливаем axis=1).