Python декораторы на максималках. Универсальный рецепт по написанию и аннотированию от мала до велика
Декорирование функций - это, наверное, самая сложная среди базовых и самая простая среди продвинутых фич языка Python.
Смотреть статью
Декорирование функций - это, наверное, самая сложная среди базовых и самая простая среди продвинутых фич языка Python.
Смотреть статью
Ход короля
Даны две различные клетки шахматной доски. Напишите программу, которая определяет, может ли король попасть с первой клетки на вторую одним ходом. Программа получает на вход четыре числа от 1 до 8 каждое, задающие номер столбца и номер строки сначала для первой клетки, потом для второй клетки.
Программа должна вывести «YES», если из первой клетки ходом короля можно попасть во вторую, или «NO» в противном случае.
Даны две различные клетки шахматной доски. Напишите программу, которая определяет, может ли король попасть с первой клетки на вторую одним ходом. Программа получает на вход четыре числа от 1 до 8 каждое, задающие номер столбца и номер строки сначала для первой клетки, потом для второй клетки.
Программа должна вывести «YES», если из первой клетки ходом короля можно попасть во вторую, или «NO» в противном случае.
Задача
Напишите функцию Python, чтобы найти отличную пару чисел, произведение которых нечетно из последовательности целочисленных значений.
Напишите функцию Python, чтобы найти отличную пару чисел, произведение которых нечетно из последовательности целочисленных значений.
Отправка электронных писем
Приведенный выше скрипт использует
В приведенной выше реализации скрипт использует данные отправителя и получателя, а также тему и текст сообщения. Затем скрипт подключается к SMTP-серверу Gmail, форматирует сообщение и отправляет его с помощью метода sendmail() . Наконец, скрипт выводит сообщение, указывающее, что электронное письмо было успешно отправлено, и отключается от SMTP-сервера.
Подробнее про smtplib можно почитать здесь.
Приведенный выше скрипт использует
библиотекуSMTP, , чтобы отправлять электронные письма указанным получателям. Реализация может быть изменена в зависимости от варианта использования.В приведенной выше реализации скрипт использует данные отправителя и получателя, а также тему и текст сообщения. Затем скрипт подключается к SMTP-серверу Gmail, форматирует сообщение и отправляет его с помощью метода sendmail() . Наконец, скрипт выводит сообщение, указывающее, что электронное письмо было успешно отправлено, и отключается от SMTP-сервера.
Подробнее про smtplib можно почитать здесь.
__init__
Когда вы создаете новый объект путем вызова конструктора класса, передавая ему аргументы, эти аргументы могут быть использованы для установки начальных значений атрибутов объекта. Внутри метода
#для_начинающих
__init__ является методом, который используется для инициализации объектов при создании экземпляров классов. Этот метод называется «конструктором» класса и выполняется автоматически при создании нового объекта данного класса.Когда вы создаете новый объект путем вызова конструктора класса, передавая ему аргументы, эти аргументы могут быть использованы для установки начальных значений атрибутов объекта. Внутри метода
__init__ вы можете определить, какие атрибуты должны быть созданы для объекта и как им присвоены начальные значения.#для_начинающих
Паттерн проектирования «Фасад»
Паттерн проектирования «Фасад» (Facade) используется для предоставления унифицированного интерфейса к группе интерфейсов подсистемы. Он позволяет скрыть сложность и детали взаимодействия между различными компонентами системы, предоставляя клиенту более простой и удобный способ взаимодействия.
#для_продвинутых
Паттерн проектирования «Фасад» (Facade) используется для предоставления унифицированного интерфейса к группе интерфейсов подсистемы. Он позволяет скрыть сложность и детали взаимодействия между различными компонентами системы, предоставляя клиенту более простой и удобный способ взаимодействия.
#для_продвинутых
«Циклический сбор мусора»
«Циклический сбор мусора» — это процесс автоматической уборки памяти, занимаемой объектами, которые больше не доступны вашей программе. В Python есть встроенный механизм сборки мусора, который автоматически освобождает память, занимаемую объектами, на которые нет ссылок.
Вы можете влиять на этот процесс с помощью модуля gc (garbage collector).
Обычно нет необходимости вручную управлять сборкой мусора, так как Python самостоятельно заботится о освобождении памяти. Однако в некоторых случаях, особенно при работе с большими объемами данных или встроенными объектами, ручное управление сборкой мусора может быть полезным.
#для_продвинутых
«Циклический сбор мусора» — это процесс автоматической уборки памяти, занимаемой объектами, которые больше не доступны вашей программе. В Python есть встроенный механизм сборки мусора, который автоматически освобождает память, занимаемую объектами, на которые нет ссылок.
Вы можете влиять на этот процесс с помощью модуля gc (garbage collector).
Обычно нет необходимости вручную управлять сборкой мусора, так как Python самостоятельно заботится о освобождении памяти. Однако в некоторых случаях, особенно при работе с большими объемами данных или встроенными объектами, ручное управление сборкой мусора может быть полезным.
#для_продвинутых
This media is not supported in your browser
VIEW IN TELEGRAM
19 июня еду на CPC.Forum — международный форум по маркетингу в Москве!
Очень уж зацепила программа: хедлайнер Ксения Собчак и 100+ спикеров, которых все знают. Будут люди из Amazon, Skyeng, Яндекс, Церебро, Купер, Flowwow и других.
Очень хочу послушать выступления Максима Спиридонова и Георгия Лобушкина. Кого не успею услышать вживую — буду в записи пересматривать. Их получат все участники в безлимитное пользование.
Дополнительно на выставке компаний планирую пообщаться с брендами напрямую и посетить организованный нетворкинг (там будет прям отдельный тайминг под это дело). О себе расскажу и полезные контакты соберу.
Самое ценное, что все это в одном месте! Вместо десятка узкопрофильных конференций.
В общем, 19 июня у меня будет насыщенный день с ответами на миллион маркетинговых вопросов сразу: где лиды брать, как личный бренд качать, что с контентом делать, какая окупаемость у доступных рекламных площадок.
А вечером будет VIP-afterparty с концертом от группы 5sta Family.
📅 19 июня, Москва, Конгресс-центр ЦМТ
Поехали вместе! Предвосхищая вопросы — оставляю ссылочку на сайт форума)
Очень уж зацепила программа: хедлайнер Ксения Собчак и 100+ спикеров, которых все знают. Будут люди из Amazon, Skyeng, Яндекс, Церебро, Купер, Flowwow и других.
Очень хочу послушать выступления Максима Спиридонова и Георгия Лобушкина. Кого не успею услышать вживую — буду в записи пересматривать. Их получат все участники в безлимитное пользование.
Дополнительно на выставке компаний планирую пообщаться с брендами напрямую и посетить организованный нетворкинг (там будет прям отдельный тайминг под это дело). О себе расскажу и полезные контакты соберу.
Самое ценное, что все это в одном месте! Вместо десятка узкопрофильных конференций.
В общем, 19 июня у меня будет насыщенный день с ответами на миллион маркетинговых вопросов сразу: где лиды брать, как личный бренд качать, что с контентом делать, какая окупаемость у доступных рекламных площадок.
А вечером будет VIP-afterparty с концертом от группы 5sta Family.
Поехали вместе! Предвосхищая вопросы — оставляю ссылочку на сайт форума)
Please open Telegram to view this post
VIEW IN TELEGRAM
unit-тесты
Unit-тесты (или unittests) — это метод тестирования ПО, который позволяет проверить, работает ли отдельная единица кода (обычно функция или метод) так, как ожидается. Библиотека
Писать хорошие unit-тесты — это важный аспект разработки программного обеспечения. Хорошие тесты обеспечивают надежность и поддерживаемость кода, помогают выявлять ошибки и улучшать качество продукта.
#для_начинающих
Unit-тесты (или unittests) — это метод тестирования ПО, который позволяет проверить, работает ли отдельная единица кода (обычно функция или метод) так, как ожидается. Библиотека
unittest входит в стандартную библиотеку Python и предоставляет набор инструментов для написания и выполнения тестовых сценариев.Писать хорошие unit-тесты — это важный аспект разработки программного обеспечения. Хорошие тесты обеспечивают надежность и поддерживаемость кода, помогают выявлять ошибки и улучшать качество продукта.
#для_начинающих
🔥 Приглашаем на бесплатный открытый вебинар курса «Высоконагруженные системы: архитектура и масштабирование»:
«Асинхронная обработка данных в высоконагруженных системах»
🗓 Когда: 16 июня, 20:00 (мск)
Когда система выходит на тысячи и миллионы запросов в секунду, синхронная обработка превращается в настоящее узкое горлышко. Асинхронная архитектура помогает снять блокировки, повысить отзывчивость и масштабировать приложение без резкого роста ресурсов.
На вебинаре разберём, как грамотно внедрять асинхронность и строить по-настоящему производительные системы.
Что будет на вебинаре:
— Зачем и когда переходить на асинхронную обработку данных в высоконагруженных проектах
— Очереди сообщений, веб-сокеты и другие инструменты асинхронного взаимодействия
— Реальный архитектурный кейс: от веб-сервера до брокера сообщений и базы данных
— Типичные узкие места асинхронных систем и проверенные способы их устранения
Что вы получите:
— Чёткое понимание принципов асинхронной архитектуры и её влияния на производительность
— Реальные примеры решений, которые можно сразу применять в своих проектах
— Знания, как избегать типичных ошибок и строить стабильные, отказоустойчивые системы
👉 Зарегистрироваться: https://otus.pw/F4ko/
Бесплатное занятие приурочено к курсу «Высоконагруженные системы: архитектура и масштабирование», где вы научитесь проектировать высоконагруженные системы, способные выдерживать экстремальные нагрузки и работать стабильно в любых условиях.
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
«Асинхронная обработка данных в высоконагруженных системах»
🗓 Когда: 16 июня, 20:00 (мск)
Когда система выходит на тысячи и миллионы запросов в секунду, синхронная обработка превращается в настоящее узкое горлышко. Асинхронная архитектура помогает снять блокировки, повысить отзывчивость и масштабировать приложение без резкого роста ресурсов.
На вебинаре разберём, как грамотно внедрять асинхронность и строить по-настоящему производительные системы.
Что будет на вебинаре:
— Зачем и когда переходить на асинхронную обработку данных в высоконагруженных проектах
— Очереди сообщений, веб-сокеты и другие инструменты асинхронного взаимодействия
— Реальный архитектурный кейс: от веб-сервера до брокера сообщений и базы данных
— Типичные узкие места асинхронных систем и проверенные способы их устранения
Что вы получите:
— Чёткое понимание принципов асинхронной архитектуры и её влияния на производительность
— Реальные примеры решений, которые можно сразу применять в своих проектах
— Знания, как избегать типичных ошибок и строить стабильные, отказоустойчивые системы
👉 Зарегистрироваться: https://otus.pw/F4ko/
Бесплатное занятие приурочено к курсу «Высоконагруженные системы: архитектура и масштабирование», где вы научитесь проектировать высоконагруженные системы, способные выдерживать экстремальные нагрузки и работать стабильно в любых условиях.
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Паттерн проектирования «Стратегия»
«Стратегия» (Strategy) является одним из шаблонов поведения, определенных в книге «Банды четырёх» (Gang of Four, GoF). Этот паттерн относится к категории поведенческих паттернов и решает задачу определения семейства алгоритмов, инкапсуляции каждого из них и обеспечения их взаимозаменяемости. Это позволяет клиентскому коду выбирать нужный алгоритм независимо от его использования.
Основная идея паттерна «Стратегия» заключается в выделении алгоритмов в отдельные классы (стратегии) и предоставлении клиентскому коду возможности выбирать и подменять эти стратегии без изменения самого клиентского кода. Таким образом, паттерн способствует легкости поддержки, расширения и внесения изменений в систему.
#для_продвинутых
«Стратегия» (Strategy) является одним из шаблонов поведения, определенных в книге «Банды четырёх» (Gang of Four, GoF). Этот паттерн относится к категории поведенческих паттернов и решает задачу определения семейства алгоритмов, инкапсуляции каждого из них и обеспечения их взаимозаменяемости. Это позволяет клиентскому коду выбирать нужный алгоритм независимо от его использования.
Основная идея паттерна «Стратегия» заключается в выделении алгоритмов в отдельные классы (стратегии) и предоставлении клиентскому коду возможности выбирать и подменять эти стратегии без изменения самого клиентского кода. Таким образом, паттерн способствует легкости поддержки, расширения и внесения изменений в систему.
#для_продвинутых
memory_profiler
Для использования
#для_начинающих
memory_profiler — это сторонний модуль для языка программирования Python, который предоставляет инструменты для профилирования использования памяти в ваших программах. Этот модуль позволяет отслеживать изменения объема памяти во время выполнения кода, выявлять утечки памяти и оптимизировать использование памяти.Для использования
memory_profiler вы должны установить его сначала. Это можно сделать с помощью инструмента установки пакетов Python, такого как pip.#для_начинающих
Закон Амдала
Закон Амдала — это концептуальное правило, описывающее ограничения ускорения, которое можно достичь при оптимизации только части вычислений в программе. Он был предложен Генри Амдалом в 1967 году и является важным принципом в области параллельных вычислений.
Правило Амдала утверждает, что общий выигрыш в производительности от ускорения какой-либо части программы ограничен долей этой части, которая не может быть параллельно выполнена, плюс долей последовательных вычислений.
#для_продвинутых
Закон Амдала — это концептуальное правило, описывающее ограничения ускорения, которое можно достичь при оптимизации только части вычислений в программе. Он был предложен Генри Амдалом в 1967 году и является важным принципом в области параллельных вычислений.
Правило Амдала утверждает, что общий выигрыш в производительности от ускорения какой-либо части программы ограничен долей этой части, которая не может быть параллельно выполнена, плюс долей последовательных вычислений.
#для_продвинутых
Что такое линейная сложность сортировки?
Линейная сложность сортировки обозначает алгоритм сортировки, который имеет временную сложность, пропорциональную количеству элементов в сортируемом массиве (или коллекции). В математической нотации линейная сложность обозначается как O(n), где "n" - количество элементов.
Примером линейной сортировки может быть алгоритм «сортировка подсчётом» (counting sort). В этом алгоритме создается дополнительный массив для подсчета количества вхождений каждого элемента. Затем на основе этой информации о количестве вхождений каждого элемента строится отсортированный массив.
#для_начинающих
Линейная сложность сортировки обозначает алгоритм сортировки, который имеет временную сложность, пропорциональную количеству элементов в сортируемом массиве (или коллекции). В математической нотации линейная сложность обозначается как O(n), где "n" - количество элементов.
Примером линейной сортировки может быть алгоритм «сортировка подсчётом» (counting sort). В этом алгоритме создается дополнительный массив для подсчета количества вхождений каждого элемента. Затем на основе этой информации о количестве вхождений каждого элемента строится отсортированный массив.
#для_начинающих
Что такое MRO?
MRO (Method Resolution Order) — это механизм, используемый для определения порядка разрешения методов при наследовании классов и множественном наследовании. MRO определяет, какие методы будут вызываться в случае, когда у наследующего класса есть методы с одинаковыми именами, унаследованными от разных базовых классов.
MRO в Python определяется с помощью алгоритма C3 Linearization (C3 линеаризации). Этот алгоритм гарантирует, что порядок разрешения методов будет согласован и предсказуем вне зависимости от порядка наследования. Он предотвращает проблемы, связанные с амбигуитетами и неоднозначностями в множественном наследовании.
#для_продвинутых
MRO (Method Resolution Order) — это механизм, используемый для определения порядка разрешения методов при наследовании классов и множественном наследовании. MRO определяет, какие методы будут вызываться в случае, когда у наследующего класса есть методы с одинаковыми именами, унаследованными от разных базовых классов.
MRO в Python определяется с помощью алгоритма C3 Linearization (C3 линеаризации). Этот алгоритм гарантирует, что порядок разрешения методов будет согласован и предсказуем вне зависимости от порядка наследования. Он предотвращает проблемы, связанные с амбигуитетами и неоднозначностями в множественном наследовании.
#для_продвинутых