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

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

Канал на бирже:
https://telega.in/c/seniorpy
Download Telegram
#вопросы_с_собеседований
Напишите функцию, которая принимает на вход строку и возвращает количество уникальных слов в этой строке. Считайте, что слова разделяются пробелами, знаками препинания должны быть удалены. Напишите код и расскажите, как вы обрабатываете знаки препинания. Какие дополнительные оптимизации можно внести?


Объяснение:
В этом коде (первая картинка) мы используем string.punctuation для определения знаков препинания и str.translate() для удаления их из строки. Затем мы приводим всю строку к нижнему регистру и разбиваем ее на слова, считая количество уникальных слов с использованием множества (set).

Оптимизации (вторая картинка):
Мы могли бы использовать регулярные выражения для более точного удаления знаков препинания и разделения слов. Вместо создания промежуточного списка words, мы могли бы сразу подсчитывать уникальные слова при проходе по строке, что сэкономило бы память.
Запросы обрабатываются медленно, задачи висят, а пользователь ждёт?

На открытом уроке разберём, как выносить длительные операции в фон в Django и перестать блокировать приложение. Покажем, как подключить Celery, настроить выполнение фоновых задач и использовать брокер сообщений RabbitMQ для управления очередями. Разберём, какие задачи стоит выносить в фон и как это влияет на стабильность и скорость работы сервиса.

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

Открытый урок для начинающих разработчиков проходит в преддверии старта курса «Python-разработчик» 28 апреля в 20:00 МСК. 

👉 Регистрация: https://otus.pw/D6Xe/

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

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

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

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

#для_начинающих
Метод __getitem__

Метод __getitem__ является частью протокола индексации, который позволяет объекту быть индексируемым, как это делается, например, для списков или словарей. Этот метод вызывается при использовании квадратных скобок [] для доступа к элементам объекта.

Этот метод также используется при работе с срезами. Если вы хотите, чтобы ваш объект поддерживал срезы, вы также можете реализовать метод __getitem__ с тремя аргументами: self, start, stop.

#для_начинающих
#вопросы_с_собеседований
Реализуйте алгоритм поиска в ширину (BFS - Breadth-First Search) для графа на Python. Напишите код и объясните, как работает этот алгоритм. Обсудите его сложность и применение.

Объяснение:

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

Шаги алгоритма:
1. Создается пустое множество visited для отслеживания посещенных вершин и очередь queue для управления порядком обхода.
2. Стартовая вершина добавляется в очередь и отмечается как посещенная.
3. Пока очередь не пуста, извлекается вершина из начала очереди (queue.popleft()).
4. Выводится значение текущей вершины и добавляются в очередь все её смежные вершины, которые еще не были посещены.
5. Шаги 3-4 повторяются до тех пор, пока очередь не опустеет.

Сложность:
Временная сложность: O(V + E), где V — количество вершин, E — количество ребер в графе.
Пространственная сложность: O(V), так как используется множество для отслеживания посещенных вершин.

Применение:
BFS применяется в задачах поиска кратчайших путей в невзвешенных графах.
Он также используется в задачах, связанных с обходом графов, например, в нахождении компонент связности.
frozenset

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

Вот несколько ключевых особенностей frozenset:

Неизменяемость: Это означает, что вы не можете добавлять, удалять или изменять элементы в frozenset после его создания.
Хешируемость: Поскольку frozenset неизменяем, он является хешируемым, что означает, что его можно использовать в качестве ключа в словарях и элемента множества.

Обратите внимание, что, поскольку frozenset не поддерживает изменения, некоторые методы, которые изменяют множество (например, add, remove, discard), не применимы к frozenset. Однако, вы можете выполнять операции, возвращающие новые frozenset, такие как объединение и пересечение.

#для_начинающих
Ruff

Ruff — это новый, быстроразвивающийся линтер Python кода, призванный заменить flake8 и isort.

Основным преимуществом Ruff является его скорость. Ruff в 10-100 раз быстрее аналогов (Линтер написан на Rust). В сравнении с flake8, автор заявляет о практически полном совпадении с набором правил инструмента и нативной реализацией популярных плагинов (flake8-bugbear и т.д.). Также Ruff совместим с Black «из коробки».

Ruff может форматировать код. Например, он автоматически удаляет неиспользуемые импорты. Что касается сортировки и группировки строк импорта, то она практически идентична isort.
Реализуйте алгоритм сортировки слиянием (Merge Sort) на Python. Напишите код и объясните, как работает этот алгоритм. Расскажите о его сложности и возможных оптимизациях.

Объяснение:
Алгоритм сортировки слиянием (Merge Sort) использует стратегию «разделяй и властвуй». Он состоит из двух основных шагов:

Разделение (Divide): Массив разделяется на две равные (при четном числе элементов) или почти равные (при нечетном) части. Этот процесс рекурсивно выполняется для каждой из подпоследовательностей.
Слияние (Merge): Отсортированные подпоследовательности сливаются обратно в один отсортированный массив.

Сложность:
Временная сложность: O(n log n) в худшем, лучшем и среднем случаях.
Пространственная сложность: O(n).

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

Метод swapcase() в Python является встроенным методом строк (str), который создает новую строку, меняя регистр каждой буквы в исходной строке. Если буква была в верхнем регистре, она будет преобразована в нижний регистр, и наоборот.

Результатом будет строка 'hELLO, wORLD!'.

#для_начинающих
Только начинаете в разработке на Python, рабочее окружение собирается на глаз, а проект сложно воспроизвести у коллег?

На открытом уроке разберём, как настроить удобное и предсказуемое окружение для Python-проекта — от структуры приложения до инфраструктуры. Покажем архитектуру типового проекта, разберём, какие компоненты нужны для разработки и как собрать локальную среду, которая повторяет рабочую. 

Отдельно рассмотрим сборку Docker-контейнеров и развёртывание в Kubernetes, чтобы вы понимали полный цикл жизни приложения. Вы увидите, как выстроить процесс так, чтобы код работал одинаково у вас, в команде и в рабочей среде. Это базовый навык, без которого невозможно уверенно расти в разработке.

👉 Открытый урок проходит в преддверии старта курса «Python-разработчик» 7 мая в 20:00 МСК. Регистрация: https://otus.pw/eBRf/

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

Метод math.perm() в Python возвращает количество способов выбрать k элементов из n элементов с порядком и без повторения.

Синтаксис:
math.perm(n, k)


Где:
n: Количество элементов из которых выбираются k элементов.
k: Количество элементов, которые выбираются.

В первом примере метод возвращает количество способов выбрать 3 элемента из 5 элементов. В результате получается 60 способов.
Во втором примере метод возвращает количество способов выбрать 5 элементов из 10 элементов. В результате получается 252 способа.

#для_начинающих
Сцепление исключений

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

В примере на картинке, если возникает ZeroDivisionError, мы попадаем в блок except, а затем выполняем вложенный код, который вызывает ValueError. С помощью ключевого слова from мы указываем, что исключение ValueError является следствием (частью) исключения ZeroDivisionError. Таким образом, информация об исключении ZeroDivisionError сохраняется.

#для_продвинутых
Функция tell()

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

Возвращаемое значение: целое число, указывающее положение указателя в байтах от начала потока.
Аргументы: tell() не принимает никаких аргументов.

#для_начинающих
Сокращение ссылок прямо в коде

Иногда возникает необходимость сделать ссылку более короткой. Для этого пригодится библиотека pyshorteners — с помощью трех строк кода и сервиса tinyurl она позволяет быстро создать короткую ссылку.
Что нам стоит диаграмму в Python построить: 5 вариантов привлекающей внимание визуализации данных и кое-что ещё

Диаграммы помогают визуализировать как простые, так и самые сложные наборы данных. При этом диаграмм — множество видов, у каждого есть свои достоинства и недостатки. О наиболее эффектных и эффективных, реализуемых с Python, мы решили рассказать в сегодняшней подборке.

Смотреть статью
В чем разница между is() и == в Python?

Операторы is и == в Python выполняют похожие функции, но работают немного по-разному. И если вы новичок, используете сравнения в коде, стоит понимать разницу. Это поможет реже прибегать к рефакторингу и дебагу.

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

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

Метод virtual_memory() возвращает объект с информацией о памяти системы. Свойство available объекта содержит количество свободной памяти в байтах.
Ищем опечатки

Пакет spellchecker позволяет отыскать ошибки в тексте, а также может предложить варианты исправлений. В примере проходимся по списку из двух слов, из которых одно ('therre') написано с опечаткой. Функция correction замечает это и предлагает одно самое вероятное исправление, а candidates — несколько.

Пакет поддерживает шесть языков.

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

Для извлечения имени из адреса электронной почты до символа ‘@‘ можно использовать регулярные выражения.

Это регулярное выражение начинает поиск с начала строки с помощью символа "^" и находит любую комбинацию строчных букв, цифр, дефисов, подчеркиваний, точек и знака минуса. Затем выражение находит символ "@" и останавливается.
cv3 — делаем OpenCV питоничным

cv3 - обёртка над opencv-python, которая ускоряет написание кода, не сужая функциональность

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

Код представлен на картинке.