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

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

Канал на бирже:
https://telega.in/c/seniorpy
Download Telegram
Что такое Протоколы

Протоколы — это соглашения, которые определяют интерфейс класса и поведение его объектов.

Протоколы задаются с помощью специальных методов, таких как str, len и другие.
Они позволяют классам работать с различными функциями и операторами языка.

Реализуя протоколы можно интегрировать классы в языке и делать их поведение естественным и интуитивным.

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

#это_база
pprint()

Функция pprint() предназначена для красивого форматированного вывода данных.

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

Может принимать ширину вывода в количестве символов для лучшего форматирования.
Имеет параметры depth и compact для настройки уровня вложенности и режима компактного вывода.

Функционал pprint() доступен через модуль pprint в стандартной библиотеке.

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

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

— Есть функции для отслеживания реакции испытуемых — регистрации нажатий клавиш, движения мыши, электроэнцефалограммы.
— Поддерживает создание протоколов экспериментов с использованием последовательностей стимулов и логики.
— Можно создавать окна для отображения стимулов разных типов.
— Позволяет экспортировать данные в разные форматы для последующей обработки.
Библиотека astropy

astropy — это библиотека для астрономии и астрофизики на Python.
Она содержит функционал для работы с астрономическими данными в разных форматах, включая FITS, ASCII и VOTable.

— Предоставляет классы и утилиты для представления и преобразования координат, дат, времени.
— Содержит поддержку физических величин с общим интерфейсом для работы с единицами измерения.
— Встроены статистические и математические функции, полезные для астрономии.
— Имеются утилиты для чтения данных из астрономических каталогов и баз.

аstropy легко расширяема — можно добавлять собственные пакеты для специфичных задач.
Функция dir()

Функция dir() используется для получения списка атрибутов и методов объекта.
Она принимает объект в качестве аргумента и возвращает список его атрибутов и методов в виде строк.

Для модулей dir() возвращает список определенных в нем имен. Для классов возвращаются его атрибуты, методы и внутренние функции.

С помощью dir() можно получить список ключевых слов языка, передав builtin или builtins в качестве аргумента.
Без аргументов dir() возвращает список имен, определенных в текущей области видимости.

#это_база
super()

super() — это встроенная функция, которая используется для вызова родительского класса. Она позволяет вызывать методы родительского класса из дочернего класса.
Это полезно при наследовании, чтобы использовать функционал базового класса.

Вызов super() ищет следующий класс в цепочке наследования и вызывает этот метод.
Функция принимает аргументы self и cls для связывания с текущим объектом и классом.

Она часто используется в методах init дочерних классов, чтобы вызвать init родителя и инициализировать его.
Использование super() позволяет избежать неявного упоминания имени базового класса в коде.

#это_база
#вопросы_с_собеседований
Что такое await?

Await используется для работы с асинхронным кодом и корутинами.

Его можно применять только внутри асинхронной функции, определенной с async def. Await позволяет избежать блокировки основного потока программы во время ожидания результатов asynс-функций.

Await делает возможным использование асинхронного кода в синхронном стиле последовательно. При вызове await передается управление обратно событийному циклу.
Выполнение функции приостанавливается до завершения await-выражения.

Чаще всего await используется при вызове асинхронных функций и методов — для ожидания результата.
Await также может применяться к объектам asyncio.Future и asyncio.Task для ожидания их завершения.

Если await вызывается для корутины, то выполнение текущей корутины приостанавливается до завершения той, которая вызвана.
#вопросы_с_собеседований
Что такое async?

Async — это синтаксис для создания асинхронного кода на основе корутин.
Асинхронное программирование позволяет выполнять операции вне основного потока выполнения программы.

С помощью async def определяются асинхронные функции-корутины. Такие функции не выполняются сразу, а возвращают объект-корутину.
Для запуска корутин используется await. Это передает управление обратно в событийный цикл до завершения корутины.

Asyncio — стандартный модуль для работы с асинхронным кодом. Он содержит событийный цикл и различные классы.

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

*Корутины полезны для операций ввода/вывода, ожидания сети, обращения к БД — там, где нужно не блокировать основной поток.
#вопросы_с_собеседований
Что такое интроспекция (intorspection)?

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

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

Некоторые примеры использования интроспекции в Python:
— Проверка типа объекта с помощью функций type() или isinstance()
— Получение списка атрибутов и методов объекта с помощью dir()
— Использование hasattr() или getattr() для проверки наличия атрибута или метода у объекта
— Использование callable() для проверки, является ли объект функцией
Pystan

Pystan — это python-обёртка для Stan, которая позволяет использовать методы байесовского статистического вывода.

Основные возможности Pystan:
— Простой интерфейс для задания байесовских моделей на языке Stan.
— Автоматическая компиляция моделей в высокооптимизированный код на C++.
— Выполнение статистического вывода с использованием методов Монте-Карло (MCMC).
— Возможность задавать сложные иерархические модели.
— Удобные инструменты для анализа результатов моделирования.
— Интеграция со многими библиотеками данных и визуализации в Python.

Pystan используется везде, где нужно решать задачи статистического моделирования и анализа данных с помощью байесовских методов.
Библиотека cvxpy

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

Основные возможности cvxpy:
— Удобный синтаксис для задания целевой функции и ограничений в виде выражений Python.
— Поддержка разных типов переменных: вещественных, целочисленных, булевых.
— Возможность задания неравенств и равенств как ограничений.
— Встроенные функции для задания норм, статистических величин и других полезных выражений.
— Автоматический выбор подходящего численного решателя на основе задачи.
— Интеграция с NumPy, SciPy и другими популярными библиотеками.

cvxyp часто используется для решения задач оптимизации в машинном обучении, обработке сигналов, финансовом моделировании и других областях.
#вопросы_с_собеседований
Для чего нужен модуль operator?

Модуль operator предоставляет функции, которые соответствуют встроенным операторам языка.
Например, функции add(), sub(), mul() и другие реализуют арифметические операторы +, -, *.

Основные причины использования модуля operator:

— Возможность передавать функции в качестве аргументов или возвращаемых значений других функций. Например, в sorted(), min(), max() и др.

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

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

— Дополнительные возможности, например, operator.itemgetter() и operator.attrgetter() для извлечения элементов из объектов.
#вопросы_с_собеседований
Что такое каррирование?

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

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

Каррирование часто используется в функциональном программировании для создания более гибких и переиспользуемых функций.
Оно помогает избежать дублирования кода и упростить работу с функциями высшего порядка.
Библиотека qiskit

Qiskit — это библиотека для работы с квантовыми вычислениями и квантовым программированием на Python.
Она позволяет реализовывать и тестировать квантовые алгоритмы на компьютере.

Основные возможности Qiskit:
— Создание и симуляция квантовых цепей.
— Работа с квантовыми алгоритмами (Гровера, Шора, квантовое Фурье-преобразование и др.).
— Оптимизация и компиляция квантовых программ.
— Интеграция с реальным квантовым оборудованием (квантовыми процессорами).
— Визуализация и анализ квантовых цепей.
Библиотека scikit-image

scikit-image — это библиотека для обработки изображений. scikit-image также удобна для применения в задачах компьютерного зрения.

Библиотека содержит множество полезных инструментов для работы с изображениями, включая:
— Фильтрация и преобразования изображений (размытие, поворот, масштабирование и т. д.).
— Сегментация изображений и анализ регионов.
— Обнаружение особых точек и линий (краев, углов, границ).
— Морфологические операции.
— Анализ текстур и цветов.
— Восстановление изображений и удаление шумов.
Моржовый оператор (Walrus Operator)

Моржовый оператор (Walrus operator) — это оператор :=, введенный в версии 3.8. Он позволяет одновременно присвоить значение переменной и вернуть его.

Синтаксис выглядит так: имя_переменной := выражение. Справа вычисляется выражение и присваивается переменной слева
Переменная доступна в остальной части выражения после оператора.

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

#это_база
Инкапсуляция

Инкапсуляция — это принцип ограничения доступа к части реализации объекта от внешнего кода.
Это позволяет предотвратить непреднамеренное изменение внутреннего состояния объекта.

В Python инкапсуляция реализуется с помощью:
— Префикса _ в именах атрибутов и методов класса. Это сигнализирует, что они предназначены только для внутреннего использования в классе.
— Двойного префикса __ в именах атрибутов методов (например, __private_method). Такая запись делает их недоступными извне класса.
Свойств (property) для контролируемого доступа к атрибутам класса.

#это_база
PySnooper

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

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

Результат использования pysnooper предоставлен на изображении.
Boltons.iterutils

Boltons
— это набор из более чем 230 утилит на чистом Python, распространяемых по лицензии BSD, которые дополняют стандартную библиотеку. А iterutils — модуль, который предоставляет множество полезных функций для работы с итераторами.

В примере мы используем следующие функции:
- chunked: разделяет список на чанки заданного размера.
- windowed: возвращает скользящее окно заданного размера из списка.
- pairwise: возвращает пары соседних элементов из списка.
- split: разделяет список на две части по заданному условию.
- split_at: разделяет список на две части по заданному индексу.
Дана входная строка s, необходимо изменить порядок слов в строке на противоположный.

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

Чтобы решить данную задачу нам необходимо:
- Удалить начальные и конечные пробелы, а также уменьшить количество пробелов между словами до одного.
- Разбить строку на отдельные слова и сохранить в списке.
- Поменять порядок слов в списке на обратный с помощью метода reverse().
- Объединить слова в строку, разделенную одним пробелом, и вернуть результат.

#разбор_кода
#вопросы_с_собеседований
Можно ли создать словарь с упорядоченным набором ключей в Python ниже 3.7?

Начиная с версии Python 3.7, порядок вставки ключей сохраняется, и вы можете создать словарь с упорядоченным набором ключей.
Чтобы создать такой словарь на версиях ниже чем 3.7, вы можете использовать collections.OrderedDict.

collections.OrderedDict сохраняет порядок добавления элементов, а также предоставляет два дополнительных метода:
.popitem() удаляет элемент с начала или конца OrderedDict;
.move_to_end() перемещает элемент в начало или конец OrderedDict.