Дано целое число, преобразовать его в римскую цифру.
В этом решении мы создаем метод
Метод использует жадный алгоритм для поиска наибольшего римского числа, которое может быть вычтено из входного числа. Затем он вычитает это число и добавляет соответствующее римское число к результату.
Этот процесс повторяется до тех пор, пока входное число не станет равным нулю.
👉@BookPython
В этом решении мы создаем метод
intToRoman
, который принимает целое число в качестве аргумента и возвращает его римское представление в виде строки.Метод использует жадный алгоритм для поиска наибольшего римского числа, которое может быть вычтено из входного числа. Затем он вычитает это число и добавляет соответствующее римское число к результату.
Этот процесс повторяется до тех пор, пока входное число не станет равным нулю.
👉@BookPython
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Mix-in
Это паттерн проектирования в ООП, когда в цепочку наследования добавляется небольшой класс-помощник. Основная идея mix-in заключается в том, что можно создать класс с определенным функционалом и потом использовать его методы в других классах. Таким образом,
В этом примере мы создали класс
👉@BookPython
Это паттерн проектирования в ООП, когда в цепочку наследования добавляется небольшой класс-помощник. Основная идея mix-in заключается в том, что можно создать класс с определенным функционалом и потом использовать его методы в других классах. Таким образом,
mix-in
— это способ расширения функциональности классов без явного наследования.В этом примере мы создали класс
Mixin
, который содержит метод mixin_method
. Затем мы создали класс MyClass
, который наследуется от Mixin
и содержит свой метод my_method
. Объект obj
создан на основе класса MyClass
и вызывает метод mixin_method
, который определен в Mixin
.👉@BookPython
Вычисления с несколькими условиями
Вы можете добавить несколько условий. Давайте отфильтруем числа, кратные 2 и 3:
👉@BookPython
Вы можете добавить несколько условий. Давайте отфильтруем числа, кратные 2 и 3:
👉@BookPython
Bottleneck
Это библиотека, которая ускоряет работу методов NumPy в 25 раз. Особенно, если массив имеет значения NaN.
В этом примере мы создаём 2D массив NumPy с 1000 строками и 10 столбцами со случайными значениями.
Далее функция move_mean используется для вычисления скользящего среднего для каждой строки в массиве. Параметр window указывает количество значений, которые будут использоваться при вычислении каждого скользящего среднего, а параметр axis указывает ось, вдоль которой будет вычисляться скользящее среднее (в данном случае мы вычисляем его для каждой строки, поэтому устанавливаем axis=1).
👉@BookPython
Это библиотека, которая ускоряет работу методов NumPy в 25 раз. Особенно, если массив имеет значения NaN.
В этом примере мы создаём 2D массив NumPy с 1000 строками и 10 столбцами со случайными значениями.
Далее функция move_mean используется для вычисления скользящего среднего для каждой строки в массиве. Параметр window указывает количество значений, которые будут использоваться при вычислении каждого скользящего среднего, а параметр axis указывает ось, вдоль которой будет вычисляться скользящее среднее (в данном случае мы вычисляем его для каждой строки, поэтому устанавливаем axis=1).
👉@BookPython
Расширенное использование - применение функций
Вы можете применять функции внутри comprehensions. Вот пример использования функции str.upper():
👉@BookPython
Вы можете применять функции внутри comprehensions. Вот пример использования функции str.upper():
👉@BookPython
Визуализация процесса релиза CPython
На прошлой неделе я встретился с резидентом разработчиков CPython и менеджером по выпуску Лукашем Лангой, чтобы обсудить процесс выпуска CPython (подробно описанный в PEP 101). Все, что я узнал, я задокументировал ниже и буду предлагать такие улучшения, как введение дополнительных средств защиты для процесса выпуска и сборки программного обеспечения для процесса сборки и конечных собранных артефактов.
https://sethmlarson.dev/security-developer-in-residence-weekly-report-9
👉@BookPython
На прошлой неделе я встретился с резидентом разработчиков CPython и менеджером по выпуску Лукашем Лангой, чтобы обсудить процесс выпуска CPython (подробно описанный в PEP 101). Все, что я узнал, я задокументировал ниже и буду предлагать такие улучшения, как введение дополнительных средств защиты для процесса выпуска и сборки программного обеспечения для процесса сборки и конечных собранных артефактов.
https://sethmlarson.dev/security-developer-in-residence-weekly-report-9
👉@BookPython
Что делать, если нужно сериализовать данные, которые не поддерживаются стандартным модулем json?
Если нужно сериализовать объекты, которые по умолчанию не поддерживаются модулем json, то есть несколько вариантов:
— Реализовать методы
— Использовать декоратор dataclass из модуля dataclasses для автоматической генерации методов сериализации.
— Создать собственный класс-наследник json.JSONEncoder и переопределить метод
— Использовать библиотеку marshmallow для создания схем сериализации/десериализации сложных объектов в JSON.
— Преобразовать объекты в
— Использовать другой формат сериализации, например YAML или MessagePack, который может поддерживать произвольные типы.
👉@BookPython
Если нужно сериализовать объекты, которые по умолчанию не поддерживаются модулем json, то есть несколько вариантов:
— Реализовать методы
__getattr__
и __setattr__
в классе объекта, чтобы преобразовать его в словарь, который уже можно сериализовать в JSON.— Использовать декоратор dataclass из модуля dataclasses для автоматической генерации методов сериализации.
— Создать собственный класс-наследник json.JSONEncoder и переопределить метод
default()
, чтобы указать как сериализовать нестандартные объекты.— Использовать библиотеку marshmallow для создания схем сериализации/десериализации сложных объектов в JSON.
— Преобразовать объекты в
dict
или list
вручную перед сериализацией с помощью методов объекта или отражения (reflection).— Использовать другой формат сериализации, например YAML или MessagePack, который может поддерживать произвольные типы.
👉@BookPython
Для более сложной стилизации вы можете использовать seaborn, который предоставляет больше эстетических возможностей.
👉@BookPython
👉@BookPython
Emot
Библиотека Emot предназначена для распознавания эмодзи в тексте.
Она может очень пригодиться, когда нам нужно предварительно обработать текстовые данные, чтобы удалить эмотиконы и эмодзи или изучить их влияние на семантику. Функции библиотеки принимают на вход строку и возвращают список словарей.
👉@BookPython
Библиотека Emot предназначена для распознавания эмодзи в тексте.
Она может очень пригодиться, когда нам нужно предварительно обработать текстовые данные, чтобы удалить эмотиконы и эмодзи или изучить их влияние на семантику. Функции библиотеки принимают на вход строку и возвращают список словарей.
👉@BookPython
Что такое списковое включение?
Это компактный способ обработки всех или части элементов в последовательности и возвращения списка с результатами. Синтаксис прост и в то же время эффективен.
👉@BookPython
Это компактный способ обработки всех или части элементов в последовательности и возвращения списка с результатами. Синтаксис прост и в то же время эффективен.
👉@BookPython
Как мы версию Sanic’а повышали
Приветствую всех читателей, меня зовут Вадим, я — бэкенд-разработчик в компании Домклик. Я работаю в команде, которая разрабатывает CRM-систему для подготовки и осуществления ипотечных сделок. В этой статье я хотел бы поделиться своим интересным опытом мажорного повышения зависимостей в проекте, который свыше пяти лет находится в проде под ежедневной нагрузкой более 2000 RPS.
Предыстория
Итак, все сервисы нашей команды на бэке написаны на Python, большинство из них — с использованием фреймворка Sanic. До момента, приведшего впоследствии к этой статье, никаких серьёзных проблем с этим фреймворком мы не испытывали. Однако одним прекрасным декабрьским днём, когда сезонность оформления ипотечных сделок традиционно приводит к повышенной нагрузке на все сервисы Домклика, мы обнаружили проблему на центральном бэкенд-сервисе нашей системы. Суть этой проблемы заключалась в том, что в случайный момент времени воркеры приложения бесследно умирали, а у реализации мультипроцессинга в используемой нами на тот момент версии Sanic есть такая хитрая (нет) особенность, что состояние воркеров после запуска никак не отслеживается, и заданное количество никак не поддерживается в случае их смерти. Как результат, спустя некоторое (от нескольких минут до нескольких часов) время после развёртывания наши поды лишались всех воркеров, кроме одного единственного (от которого Sanic первоначально и форкает новые процессы), что драматически снижало перевариваемую нашим сервисом нагрузку: поды начинали тротлить по CPU, event loop забивался корутинами, приложение обжиралось коннектами к базе данных, запросы обрабатывались гораздо медленнее, и в конце концов мы начинали отдавать 500-ки.
https://habr.com/ru/companies/domclick/articles/761838/
👉@BookPython
Приветствую всех читателей, меня зовут Вадим, я — бэкенд-разработчик в компании Домклик. Я работаю в команде, которая разрабатывает CRM-систему для подготовки и осуществления ипотечных сделок. В этой статье я хотел бы поделиться своим интересным опытом мажорного повышения зависимостей в проекте, который свыше пяти лет находится в проде под ежедневной нагрузкой более 2000 RPS.
Предыстория
Итак, все сервисы нашей команды на бэке написаны на Python, большинство из них — с использованием фреймворка Sanic. До момента, приведшего впоследствии к этой статье, никаких серьёзных проблем с этим фреймворком мы не испытывали. Однако одним прекрасным декабрьским днём, когда сезонность оформления ипотечных сделок традиционно приводит к повышенной нагрузке на все сервисы Домклика, мы обнаружили проблему на центральном бэкенд-сервисе нашей системы. Суть этой проблемы заключалась в том, что в случайный момент времени воркеры приложения бесследно умирали, а у реализации мультипроцессинга в используемой нами на тот момент версии Sanic есть такая хитрая (нет) особенность, что состояние воркеров после запуска никак не отслеживается, и заданное количество никак не поддерживается в случае их смерти. Как результат, спустя некоторое (от нескольких минут до нескольких часов) время после развёртывания наши поды лишались всех воркеров, кроме одного единственного (от которого Sanic первоначально и форкает новые процессы), что драматически снижало перевариваемую нашим сервисом нагрузку: поды начинали тротлить по CPU, event loop забивался корутинами, приложение обжиралось коннектами к базе данных, запросы обрабатывались гораздо медленнее, и в конце концов мы начинали отдавать 500-ки.
https://habr.com/ru/companies/domclick/articles/761838/
👉@BookPython