seniorpy | Unsorted

Telegram-канал seniorpy - Senior Python Developer

54326

№ 4931117861 Публикуем интересные/полезные фичи/библиотеки языка. По вопросам сотрудничества: @adv_and_pr Канал на бирже: https://telega.in/c/seniorpy

Subscribe to a channel

Senior Python Developer

Duck typing (утиная типизация)

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

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

Преимущества:

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

— Код становится более гибким и менее связанным.

— Легче расширять и изменять код, добавляя новые типы.

— Упрощает полиморфизм.

Читать полностью…

Senior Python Developer

Композиция (ассоциация) классов

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

Внешний класс не наследует функционал внутреннего, в отличие от наследования, просто использует его.

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

#это_база

Читать полностью…

Senior Python Developer

#вопросы_с_собеседований
Что такое и чем отличается old-style от new-style classes?

— Old-style классы наследуются непосредственно от объекта класса type. New-style классы наследуются от объекта класса object.

— New-style классы поддерживают дополнительные возможности, например descriptors, properties, slots. В old-style классах они не работают.

— В new-style классах метод init вызывается при наследовании, в отличие от old-style классов.

— New-style классы предпочтительны, так как полностью поддерживают особенности ООП. Большинство библиотек требуют именно их.

Рекомендуется использовать new-style классы, унаследованные от object. Они обладают расширенным функционалом и лучше взаимодействуют с другими объектами.

Читать полностью…

Senior Python Developer

LineaPy

LineaPy
это библиотека для работы с временными рядами и анализа временных данных.

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

В этом примере мы получили прогнозные значения временного ряда на 5 периодов вперед с помощью модели ARIMA из LineaPy за считанные строки кода.

Читать полностью…

Senior Python Developer

#вопросы_с_собеседований
Что такое Diamond problem?

Diamond problem - это проблема, возникающая при использовании множественного наследования.

Суть проблемы заключается в том, что если есть два базовых класса A и B, от которых наследуется класс C, а классы A и B в свою очередь наследуются от общего предка D, то при обращении к членам класса D из объекта класса C возникает неоднозначность - непонятно, члены из какого класса использовать - A или B.

В Python эта проблема решается с помощью механизма MRO (Method Resolution Order) - порядка разрешения методов, который однозначно определяет, какие методы какого класса должны вызываться.

Читать полностью…

Senior Python Developer

Завершение программы

sys.exit()
это функция, которая позволяет завершить выполнение программы и возвратить код возврата операционной системе.
Принимает один необязательный числовой аргумент — код возврата программы. По умолчанию это 0, что означает успешное завершение, а код возврата отличный от нуля сигнализирует об ошибке или нештатной ситуации.

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

#это_база

Читать полностью…

Senior Python Developer

Метод count()

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

Метод принимает в качестве аргумента элемент, количество которого нужно посчитать и возвращает число - количество найденных вхождений элемента.

Работает для списков, кортежей, строк.

#это_база

Читать полностью…

Senior Python Developer

Python-dateutil

Библиотека python-dateutil предоставляет расширенные возможности для работы с датами и временем.

Она может использоваться для:
- Парсинга и форматирования дат;
- Выполнения арифметических операций с датами;
- Работы с часовыми поясами;
- Вычисления разницы между датами.

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

relativedelta используется для смещения даты на нужные дни недели.
MO(-1) - для получения предыдущего понедельника.
SU - для получения следующего воскресенья.

Читать полностью…

Senior Python Developer

Заменяем часть строки через str.replace()

Функция str.replace() позволяет заменить все вхождения подстроки в строке на другую подстроку, не указывая явно позиции для замены.

В примере мы создали строку text с двумя вхождениями подстроки "Hello".
Далее с помощью метода replace() заменяем "Hello" на "Hi".

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

#это_база

Читать полностью…

Senior Python Developer

Глубокое копирование (deep copy)

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

Когда мы вызываем глубокое копирование, происходит следующее:
- Создается новый контейнерный объект (список, словарь и т. д.);
- Для каждого элемента исходного объекта рекурсивно вызывается глубокое копирование:
- Если элемент является изменяемым объектом (списком, словарем), то создается его копия с рекурсивным копированием вложенных элементов;
- Если элемент неизменяемый (число, строка) - он просто копируется как есть;
- Копии вложенных объектов вставляются в копию исходного объекта.

#это_база

Читать полностью…

Senior Python Developer

Pymorphy2

Pymorphy2 - это библиотека для морфологического анализа слов русского языка.
С помощью Pymorphy2 можно определить различные грамматические характеристики слова (род, число, падеж, время и т. д.), а также получить его нормальную форму (лемму).

В этом примере мы создаем экземпляр объекта MorphAnalyzer и анализируем слово "котик". Затем мы используем метод parse, чтобы получить различные грамматические характеристики слова, и выводим его форму в родительном падеже единственного числа с помощью метода inflect. Результат выводится в консоль.

Читать полностью…

Senior Python Developer

Scrapy

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

Этот код создает веб-паука, который извлекает цены товаров с сайта example.com. Он использует CSS-селекторы для поиска элементов страницы, содержащих информацию о продуктах, и извлекает их название и цену.

Читать полностью…

Senior Python Developer

Класс Process

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

При создании процессов нужно учитывать:
— Ограничения на доступ к данным между процессами.
— Синхронизацию процессов при необходимости.

#это_база

Читать полностью…

Senior Python Developer

⌨️ Docker для python разработчика

Приглашаем на открытый урок.

🗓 20 августа в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Python-разработчик. Продвинутый уровень».

Что будет на вебинаре?


✔️ Разберём особенности использования Docker для контейнеризации решений на Python.
✔️ Рассмотрим лучшие практики контейнеризации.
✔️ Разберём способы оркестрации мультиконтейнерных решений

Что в результате вебинара узнают слушатели? Как/где смогут применить полученные навыки?
- Использовать Docker для контейнеризации решений на продвинутом уровне.
- Применять лучшие практики контейнеризации.
- Управлять оркестрацией контейнеров различными способами.

🔗 Ссылка на регистрацию: https://otus.pw/v70O/

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Читать полностью…

Senior Python Developer

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

Middleware — это промежуточное программное обеспечение, которое располагается между приложением и сетевыми службами.

Основная цель middleware — обработка запросов и ответов между клиентом и сервером.

Middleware выполняет такие функции, как:
— Аутентификация и авторизация пользователей
— Маршрутизация запросов к соответствующим сервисам или микросервисам
— Логирование и мониторинг
— Кэширование ответов для повышения производительности
— Балансировка нагрузки между серверами
— Шифрование и дешифрование данных
— Проверка и валидация данных
— Форматирование ответов в нужный формат
— Обработка ошибок и исключений

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

Читать полностью…

Senior Python Developer

Атрибуты объектов

Атрибуты — это переменные, связанные с объектом класса и хранящие его данные.
Они объявляются внутри класса, а доступ к атрибутам происходит через точку после объекта (object.attr). Бывают public, приватными (__attr) и защищенными (_attr). Публичные атрибуты доступны везде, приватные только в классе, защищенные в классе и дочерних.

Значение по умолчанию None, если не задано другое.

Атрибуты можно создать в конструкторе init() и изменить в методах класса, а новые атрибуты к объектам можно добавлять в рантайме.

#это_база

Читать полностью…

Senior Python Developer

Вы сталкиваетесь с блокировками в PostgreSQL при росте нагрузки? На открытом уроке OTUS разберём, как обеспечить высокую параллельность даже в высоконагруженных системах.

8 сентября в 20:00 — вебинар «Борьба с блокировками в PostgreSQL: как достичь высокой параллельности при большой нагрузке». Вы изучите типы блокировок, инструменты диагностики deadlock‑ов, приёмы оптимизации запросов и архитектурные best practices. В программе — реальные кейсы из продакшена и стратегии проектирования систем, выдерживающих тысячи параллельных запросов.

Урок проходит в преддверии старта курса «Высоконагруженные системы: архитектура и масштабирование». Все участники получат скидку на обучение.

Запишитесь сейчас — усилите экспертизу и научитесь строить стабильные высокопроизводительные системы.

👉 Записатьсяhttps://otus.pw/lEhr/

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Читать полностью…

Senior Python Developer

#вопросы_с_собеседований
В чем отличие @foobar от @foobar()?

@foobar и @foobar() — это разные способы применения декораторов.

@foobar применяет декоратор без аргументов, а @foobar() применяет декоратор с аргументами.
То есть @foobar() вызывает декоратор foobar, передавая ему аргументы, а затем результат (декорированная функция) применяется к функции.

Читать полностью…

Senior Python Developer

Владение, заимствование и ссылки в Rust: как компилятор делает ваш код безопасным

В Rust одна из самых непривычных для разработчиков тем — это ownership (владение) и borrowing (заимствование). Многие пытаются писать на Rust как на C++ или Python, натыкаются на компилятор, и правила borrow checker'а поначалу кажутся слишком строгими. На деле компилятор просто защищает вас от ошибок, которые в других языках приводят к падениям, утечкам памяти и гонкам данных. Но чтобы подружиться с borrow checker’ом, нужно понять логику, а не заучивать правила.

На открытом вебинаре 9 сентября в 20:00 разберём фундаментальные концепции Rust, которые делают код безопасным без сборщика мусора. Поговорим о том, почему на одни и те же данные можно взять сколько угодно иммутабельных ссылок (&), но мутабельная (&mut) может быть только одна — и не одновременно с иммутабельными. Разберём, чем перемещение (move) отличается от копирования (Copy/Clone). Обсудим, что такое время жизни (lifetimes): когда его нужно указывать явно, а когда компилятор выводит его сам по правилам элизии (lifetime elision). На практических примерах посмотрим, как разбирать типичные ошибки borrow checker'а, писать функции, безопасно работающие со ссылками и слайсами, и почему правила владения и заимствования предотвращают гонки данных, обращение к освобождённой памяти и двойное освобождение.

Вебинар не для тех, кто хочет просто «посмотреть синтаксис» без погружения в модель памяти. Подойдёт тем, кто уже знаком с основами языка — переменными, функциями, типами — и хочет наконец разобраться в модели памяти Rust, а также программистам с опытом в C++, Java или Python, которые хотят понять самую важную и необычную концепцию языка.

👉 Записатьсяhttps://otus.pw/ebD1/

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Читать полностью…

Senior Python Developer

7,2 млн рублей призового фонда и реальные задачи космической отрасли 🚀

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

Участников ждут:
🛰 реальные задачи космической отрасли
👥 команды от 3 до 5 человек
💻 очный и онлайн-форматы
🧑‍💻 работа с экспертами и трекерами
🏆 финал в Москве

Первый КосмоХакатон стартует уже 4 сентября в Ростове-на-Дону.

Дальше серия продолжится в Красноярске, Нижнем Новгороде, Благовещенске и Санкт-Петербурге, а завершится финалом в Москве.

Участие бесплатное. Присоединиться могут студенты, аспиранты, молодые ученые и специалисты от 18 лет.
🔗 Зарегистрироваться: https://космохакатон.рф

Читать полностью…

Senior Python Developer

Fugue

Fugue — это библиотека, которая используется для создания и оркестровки workflow машинного обучения.
Она позволяет быстро создавать, тестировать и масштабировать ML приложения, автоматизируя рутинные этапы.

Основные возможности:
— Описание этапов workflow как отдельных функций.
— Автоматическое определение зависимостей между функциями.
— Планирование выполнения функций с учетом зависимостей.
— Кэширование промежуточных результатов для оптимизации.
— Распределенное выполнение на разных ядрах или машинах.

В этом примере с помощью декоратора @FugueWorkflow() отмечены функции, которые будут этапами workflow.
Fugue автоматически определит, что fit_model зависит от preprocess, а predict - от fit_model.

При вызове функций Fugue учтёт эти зависимости и выполнит их в правильном порядке, кэшируя промежуточные результаты.

Читать полностью…

Senior Python Developer

multitasking

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

Multitasking полезен, когда в приложении нужно:

- Выполнять несколько задач параллельно
- Организовать очереди задач и пулы потоков
- Избежать блокировки интерфейса при длительных операциях

Как видно из примера, задачи выполнились параллельно, в произвольном порядке.

Читать полностью…

Senior Python Developer

#вопросы_с_собеседований
Как изменить тип данных списка?

Для изменения типа данных в списке можно использовать встроенные функции:

1. map() - применяет указанную функцию к каждому элементу списка и возвращает новый список с измененными элементами:

old_list = [1, 2, 3]
new_list = map(str, old_list)


В новом списке все элементы будут строкового типа.

2. Использование генераторного выражения:

old_list = [1, 2, 3]
new_list = [str(x) for x in old_list]


Здесь мы преобразуем элементы в строку и помещаем в новый список.

Также можно применить конструкцию map к генераторному выражению:

new_list = list(map(str, [1, 2, 3]))

Читать полностью…

Senior Python Developer

Функция id()

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

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

#для_продвинутых

Читать полностью…

Senior Python Developer

PostgreSQL: архитектура и тюнинг SQL-запросов

Погрузись в архитектуру и прокачай оптимизацию запросов одной из самых популярных open source СУБД – PostgreSQL.

🌐 В программе курса:

🤩 Разберём, как работают СУБД вообще и PostgreSQL в частности: что такое MVCC, ACID, WAL, LRU, PPC/TPC и другие фундаментальные понятия архитектуры баз данных

🤩 Получишь теорию и практику EXPLAIN и EXPLAIN ANALYZE на разных типа запросов: без индексов, с индексами, index only, нормализованные и документ-ориентированные данные и json-поля, изменение параметров сессии/конфигурации для ускорения запросов

🤩 Изучишь архитектуру хранения данных в PostgreSQL, типы и особенности индексов, а также полезные советы и трюки оптимизации БД

🤩 Получишь свой собственный выделенный облачный PostgreSQL-сервер (8 vCPU, 12G RAM, 100G NVMe) – предоставляется БЕСПЛАТНО на время обучения + готовый e-commerce датасет TPC-H (миллион пользователей, несколько миллионов заказов на десятки гигабайт)

🗓 Старт курса: 3 сентября. 5 недель обучения.

seniorpy">Изучить программу и записаться можно здесь.

🤩Кто мы: R&D-центр Devhands, автор курса Николай Ихалайнен, эксперт по СУБД (ex-Percona), со-основатель MyDB, энтузиаст открытого ПО.

Реклама. ИП Рыбак А.А. ИНН 771407709607 Erid: 2VtzquuHE37

Читать полностью…

Senior Python Developer

Tabulate

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

Основные возможности библиотеки Tabulate:
- Вывод табличных данных в различных форматах (plain, simple, grid, pipe, orgtbl, tsv, html, latex, ts, и др.).
- Автоматическое определение заголовков таблицы.
- Поддержка разных типов данных (числа, строки, списки, кортежи, словари и др.).

В результате работы кода из примера выводится таблица с данными о фруктах, их цене и количестве, оформленная в формате "grid".

Читать полностью…

Senior Python Developer

Соединение списка и множества в словарь

Для соединения списка и множества в словарь можно использовать встроенную функцию zip(). Эта функция объединяет элементы нескольких последовательностей (`списков`, множеств, кортежей и т.д.) в кортежи.

Для создания словаря из списков и множеств нужно сначала объединить элементы в кортежи при помощи функции zip(), а затем создать словарь из этих кортежей при помощи функции dict().

fruit_prices будет содержать словарь {'apple': 1.20, 'banana': 0.80, 'orange': 1.50}.

Читать полностью…

Senior Python Developer

Работа с регистрами

Строки в Python имеют свойство регистра — прописные и строчные буквы считаются разными символами.

Для преобразования регистра используются методы строк:
str.upper() — преобразует строку к верхнему регистру.
str.lower() — преобразует строку к нижнему регистру.
str.swapcase() — меняет регистр каждого символа на противоположный.
str.capitalize() — делает первую букву заглавной, остальные строчными.

Регистр конкретного символа можно проверить в строке методами:
str.isupper() — проверка на заглавный регистр.
str.islower() — проверка на строчный регистр.

Регистр важно учитывать при сравнении строк на равенство.

#это_база

Читать полностью…

Senior Python Developer

Dictionary Comprehension

Dictionary comprehension — это конструкция, позволяющая компактным способом создавать словари на основе существующих итерируемых объектов.

Dictionary comprehension применяется в ситуациях, когда нужно:
— Быстро создать словарь из списка или другого итерируемого объекта.
— Преобразовать одну структуру данных в словарь.
— Создать словарь с некоторой обработкой элементов.

Основные преимущества dictionary comprehension:
— Компактный и читаемый синтаксис по сравнению с циклами.
— Лаконичное создание словарей "на лету".
— Оптимизированная производительность по сравнению с циклами.

Читать полностью…

Senior Python Developer

super()

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

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

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

#это_база

Читать полностью…
Subscribe to a channel