№ 4931117861 Публикуем интересные/полезные фичи/библиотеки языка. По вопросам сотрудничества: @adv_and_pr Канал на бирже: https://telega.in/c/seniorpy
#вопросы_с_собеседований
Для чего нужен модуль warning?
Модуль warning используется для вывода предупреждений во время выполнения программы.
Предупреждения отличаются от исключений тем, что не прерывают нормальный ход программы.
Они позволяют уведомить разработчика о потенциальных проблемах или нежелательных ситуациях в коде, но при этом не останавливать его выполнение.
Основные причины для использования предупреждений:
— Уведомить о неэффективных конструкциях в коде, которые можно оптимизировать.
— Предупредить об устаревших методах или функциях, которые могут быть удалены в будущих версиях.
— Обозначить использование ненадежных внешних данных или API.
— Выявить подозрительные ситуации, которые не являются критичными ошибками, но требуют внимания.
#вопросы_с_собеседований
Что делают StringIO и BytesIO?
StringIO и BytesIO — это классы из стандартной библиотеки, которые позволяют обрабатывать строки и байты как файлоподобные объекты.
StringIO предназначен для работы с текстом. Он позволяет записывать строки в объект и считывать их оттуда же, имитируя файловый интерфейс.
Это удобно для работы со строками в местах, где ожидается файл — например, для mock-объектов.
BytesIO выполняет ту же роль для байтов — позволяет записывать байты в объект и считывать их как файл.
Это удобно для имитации файлового ввода/вывода в памяти или для работы с двоичными данными.
В целом, эти классы упрощают работу с текстом и двоичными данными, эмулируя файловый интерфейс для строк и байтов в памяти.
tell()
Метод tell()
используется для получения текущей позиции (смещения) при работе с файлами и файлоподобными объектами.
При открытии файла указатель текущей позиции находится в начале. По мере чтения/записи он смещается.
Чтобы узнать текущее значение этого смещения, применяется метод tell()
.
Это позволяет:
— Узнать размер файла, сравнив позицию после чтения с начальной.
— Вернуться к определенной позиции с помощью seek()
.
— Отслеживать прогресс обработки больших файлов.
— Получить позицию в строковых буферах и потоках байтов.
Метод tell()
возвращает текущую позицию в файле в байтах от начала.
🚀 Освойте основные паттерны проектирования и научитесь применять их в сложных ситуациях на онлайн-курсе «Архитектура и шаблоны проектирования» в OTUS.
Пройдите вступительный тест и узнайте, осилите ли вы уровень курса. Результат теста получите сразу.
👉 ПРОЙТИ ХАРДКОРНЫЙ ТЕСТ ПО ПАТТЕРНАМ
Сможете успешно пройти тест — получите доступ к курсу по специальной цене! Курс доступен в рассрочку.
Нативная интеграция. Информация о продукте www.otus.ru
Тернарный оператор
Тернарный оператор — это оператор, позволяющий записать условную конструкцию if-else в одну строку.
Тернарный оператор часто используется для условного присваивания значений переменной, выбора между двумя вариантами в одну строку.
Он позволяет сократить и упростить запись условных выражений. Однако не рекомендуется использовать вложенные конструкции, т. к. это ухудшает читаемость.
В данном примере тернарный оператор используется:
— Для вывода одной из двух фраз в зависимости от условия a > b
.
— Для присваивания переменной result
одного из двух значений в зависимости от четности a
.
#это_база
#вопросы_с_собеседований
Зачем нужен wraps?
Декоратор functools.wraps используется для того, чтобы сохранить информацию о функции-оригинале при создании декоратора.
Когда мы создаем декоратор, он заменяет оригинальную функцию на обернутую. При этом теряется информация о названии функции, docstring и другие атрибуты.
Используя wraps, мы можем сохранить эти атрибуты. Таким образом декорированная функция будет выглядеть как оригинальная для программиста.
Это полезно для отладки и понимания кода. Например, при просмотре стека вызовов будет видно оригинальное имя функции, а не имя декоратора. При использовании help() будет выведен нужный docstring.
Переименование файлов в Python
rename() — это функция из модуля os, которая позволяет переименовывать файлы и директории.
Используется для переименования файлов и директорий на файловой системе. Принимает два аргумента - старое имя и новое имя и атомарно переименовывает файл за одну операцию.
Также позволяет перемещать файлы между разными директориями.
#это_база
Точка входа в программу
Конструкция if __name__ == '__main__' используется для того, чтобы определить, запущен ли файл модуля напрямую или импортирован из другого модуля.
Эта конструкция позволяет запустить какой-то код только при прямом вызове модуля, так как name будет равно 'main' только если модуль запущен напрямую.
Это позволяет запускать программу полностью только когда она основная, а не импортируется в качестве модуля.
#это_база
– Avito Backend United meetup #7: Долма
Встречаемся в Ереване с коллегами из Тинькофф и Yandex Cloud 31 августа в 18:30 по местному (!) времени.
Вы тоже в Армении? Забронируйте себе место офлайн.
Подискутируем на тему Kubernetes под кофе и мигрируем на афтерпати.
Смотреть из любой точки мира и задавать вопросы можно и в прямом эфире. Чтобы получить напоминание о нём, зарегистрируйтесь здесь.
whylogs
whylogs — это библиотека для мониторинга и аудита машинного обучения.
Она помогает делать ML системы более прозрачными, стабильными и надёжными за счёт постоянного мониторинга и аудита.
Она используется для того, чтобы:
— Отслеживать статистику и метрики моделей и данных в режиме реального времени.
— Выявлять дрейф данных - изменения в распределении данных со временем.
— Собирать примеры исключений и выбросов.
— Проводить аудит моделей и данных в поисках проблем.
— Генерировать автоматические отчёты и визуализации.
— Интегрировать с MLflow, TensorBoard и другими инструментами.
Атрибуты объектов
Атрибуты — это переменные, связанные с объектом класса и хранящие его данные.
Они объявляются внутри класса, а доступ к атрибутам происходит через точку после объекта (object.attr). Бывают public, приватными (__attr) и защищенными (_attr). Публичные атрибуты доступны везде, приватные только в классе, защищенные в классе и дочерних.
Значение по умолчанию None, если не задано другое.
Атрибуты можно создать в конструкторе init() и изменить в методах класса, а новые атрибуты к объектам можно добавлять в рантайме.
#это_база
Композиция (ассоциация) классов
Композиция (ассоциация) классов — это способ связи объектов разных классов. Позволяет создавать сложные объекты из более простых.
Один класс содержит объект другого класса как атрибут, при этом внутренний объект является частью внешнего.
Внешний класс не наследует функционал внутреннего, в отличие от наследования, просто использует его.
Композиция классов позволяет создавать сложные объекты из простых классов и подходит для моделирования реальных взаимосвязей.
#это_база
🐍 Не просто сложно, а очень сложно... пройти хардкорный тест по Python от OTUS.
⬆️ Ответьте на 20 вопросов и проверьте, насколько вы готовы к обучению на продвинутом курсе «Python Developer. Professional» от OTUS.
На котором вас ждет:
- Продвинутые темы и практика на «боевых» задачах уровня Middle+
- Живое общение с экспертами Python-сообщества
- Проектная работа, которой можно показать свой уровень на собеседовании
💪 Овладейте лучшими практиками и навыками Python для уверенного карьерного ростаНа курсе рассматриваются все особенности актуальных версий Python 3.6+.
👉 ПРОЙТИ ТЕСТ: https://otus.pw/q3XL/Нативная интеграция. Информация о продукте www.otus.ru
LineaPy
LineaPy — это библиотека для работы с временными рядами и анализа временных данных.
Эта библиотека позволяет быстро решать типовые задачи анализа временных рядов без необходимости "изобретать велосипед".
Она удобна для анализа временных данных в задачах прогнозирования, мониторинга, выявления сезонности, трендов и аномалий. Имеет интуитивный API и хорошую документацию.
В этом примере мы получили прогнозные значения временного ряда на 5 периодов вперед с помощью модели ARIMA из LineaPy за считанные строки кода.
#вопросы_с_собеседований
Что такое Diamond problem?
Diamond problem - это проблема, возникающая при использовании множественного наследования.
Суть проблемы заключается в том, что если есть два базовых класса A и B, от которых наследуется класс C, а классы A и B в свою очередь наследуются от общего предка D, то при обращении к членам класса D из объекта класса C возникает неоднозначность - непонятно, члены из какого класса использовать - A или B.
В Python эта проблема решается с помощью механизма MRO (Method Resolution Order) - порядка разрешения методов, который однозначно определяет, какие методы какого класса должны вызываться.
#вопросы_с_собеседований
Что можно передать в конструктор исключения?
В конструктор исключения можно передать любые аргументы, которые помогут потом разобраться в причине возникновения исключения.
Обычно в конструктор передают как минимум сообщение, описывающее проблему. Это позволяет потом вывести это сообщение с помощью метода args исключения и таким образом понять, что именно пошло не так.
Также хорошей практикой считается передавать код ошибки — некий уникальный идентификатор проблемы. Это упрощает обработку конкретных исключений в программе.
#вопросы_с_собеседований
Для чего используются метаклассы?
Метаклассы используются для создания классов и позволяют изменять поведение класса, модифицировать процесс его создания.
Основные случаи использования метаклассов:
— Реализация паттернов проектирования, таких как Singleton, Factory Method и другие.
— Проверка типов. Метакласс может валидировать атрибуты класса, параметры методов, выполнять инъекцию зависимостей.
— Регистрация классов. С помощью метакласса можно автоматически регистрировать создаваемые классы, например, в глобальном реестре.
— Создание протоколов и интерфейсов, похожих на языки, подобные Protocol Buffers.
— Логирование и трассировка. Метакласс позволяет следить за созданием класса и вызовами его методов.
— Расширение класса дополнительным функционалом. Добавление методов к классу через метакласс.
raise
Конструкция raise
используется для генерации исключений.
Когда в коде происходит что-то непредвиденное или некорректное — можно сгенерировать исключение командой raise
.
Например:
raise ValueError('Invalid value')Здесь мы генерируем исключение ValueError с сообщением об ошибке.
calculate_discount
проверяет входные данные. Если скидка меньше 0 или больше 100 — с помощью raise
генерируется исключение ValueError с сообщением.
Читать полностью…
Оператор pass
Оператор pass
— это особая конструкция, которая не делает ничего.
Она может применяться в следующих ситуациях:
— Заглушка для незавершенных блоков кода. Если написано только определение функции или класса, но нет тела - можно вставить pass
, чтобы код был допустимым синтаксически.
— Пустые блоки в циклах. Вместо тела цикла можно написать pass
, если на данном этапе нет необходимости выполнять какие-либо действия.
— Пропускать блоки кода в условных конструкциях. Если в ветви if-else ничего делать не нужно, можно использовать pass
.
— Создание абстрактных базовых классов и заготовок методов, которые будут переопределены позже в подклассах.
— Обозначение функций или классов, которые планируется реализовать в будущем.
Как видно из примера, все числа от 0 до 9 выводятся кроме 5.
#это_база
У Нетологии появился бесплатный курс-симулятор «Рабочая неделя веб-разработчика на Python»
Если вы хотите взглянуть на рабочую обстановку веб-разработчика на Python изнутри и у вас есть буквально пара свободных часов — загляните в этот курс-симулятор. Вместе со стажёром Максом вы напишете свой первый код, пообщаетесь с коллегами, разберёте задачи — и не всегда это будет непосредственно кодинг.
В программе курса:
- Знакомство с задачами начинающего веб-разработчика на Python. Вы узнаете, из чего состоит его рабочий день и какими задачами помимо написания кода может заниматься разработчик.
- Взаимодействие с командой. Узнаете, кто есть кто в отделе разработки и как выглядит общение между разработчиками.
- Практические задания. Вместе с Максом напишете программу, которая будет рассчитывать стоимость партии товара корма для кошек с помощью встроенного тренажёра по программированию.
- Подведение итогов стажировки. Узнаете, в каком направлении решил развиваться Макс, и сможете определиться со своим выбором с помощью специального квиза.
Курс будет полезен тем, кто только интересуется сферой — вы сможете решить, интересно ли вам развиваться в Python-разработке и с чего начать освоение профессии.
Начать заниматься с Максом → https://netolo.gy/b3E6
Реклама. ООО «Нетология» LatgC1U17
#вопросы_с_собеседований
Для чего могут применять конструкцию try finally без except?
Конструкция try-finally без блока except может применяться в следующих случаях:
— Для закрытия файлов после работы с ними, даже если произошла ошибка.
— Для освобождения ресурсов, таких как сетевые соединения или блокировки.
— Для отмены каких-либо длительных операций или процессов в случае прерывания работы программы. Например, отмена запущенных потоков.
— Для логирования или уведомления о завершении блока кода, даже если в нем произошла ошибка.
— Для выполнения необходимой логики по завершении работы блока кода вне зависимости от результата, например сброс счетчиков.
TCD — это простое в использовании, но при этом высоконадёжное распределённое хранилище для пар ключ-значение. И нужно уметь с ним работать.
Первый подход предлагаем сделать на открытом уроке курса «NoSQL» в Отус 28 августа, в 20.00 (мск).
💬На вебинаре «Введение в ETCD-кластер», который проведет Евгений Аристов, вы изучите:
- цели и задачи ETCD;- отличия ETCD от прочих аналогичных решений;- алгоритм Raft;- основные моменты установки и настройки кластера ETCD.
👉Регистрируйтесь и ставьте событие в календарь: https://otus.pw/5OKn/
🔥Продолжить изучение тонкостей NoSQL вы сможете на самом курсе, который стартует уже в сентябре.
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. erid: LjN8KUYpT
#вопросы_с_собеседований
В каких случаях можно обработать SyntaxError?
SyntaxError — это исключение, которое генерируется интерпретатором при обнаружении ошибки в синтаксисе кода.
Обработать это исключение можно в следующих случаях:
— При разборе и выполнении кода, сгенерированного пользователем в приложении (например, в песочнице).
— При динамическом изменении и выполнении кода с помощью eval() или exec().
— В REPL оболочках для обработки ошибок в интерактивном режиме.
— В инструментах для проверки и валидации кода на корректность синтаксиса.
— В интерпретаторах и компиляторах для информирования пользователя об ошибке.
— В системах автодополнения кода для обработки некорректного синтаксиса.
— В средствах отладки и трассировки для выявления ошибок в выполняемом коде.
#вопросы_с_собеседований
Что такое подгенератор (subgenerator)?
Подгенератор создается с помощью конструкции yield from внутри генератора.
Использование подгенераторов позволяет разбить генератор на несколько частей для упрощения кода и оптимизации памяти. Это полезный инструмент при работе с последовательностями.
Механизм передает значения между генераторами без сохранения всей последовательности в памяти и блокирует основной генератор до полного завершения подгенератора.
Duck typing (утиная типизация)
Duck typing — это концепция, позволяющая использовать объекты независимо от их типа, базируясь на их свойствах и методах.
Основная идея — не проверять тип объекта напрямую, а пытаться использовать его так, как нам нужно.
Преимущества:
— Нет необходимости привязываться к конкретным классам и типам.
— Код становится более гибким и менее связанным.
— Легче расширять и изменять код, добавляя новые типы.
— Упрощает полиморфизм.
👉 Подключайтесь 24 августа в 20:00 в OTUS к открытому уроку «Работа с пакетами в Python с помощью pip и poetry».
💪 На занятии разберем оба пакетных менеджера, поговорим про основные сценарии использования, обсудим различия, узнаем, в каких случаях можно обойтись решением попроще, а в каких случаях требуется более продвинутый подход.
В результате урока вы узнаете различия между пакетными менеджерами pip и poetry, научитесь применять пакетные менеджеры в работе.
👉 Для участия и получения записи зарегистрируйтесь https://otus.pw/5oM7/
📌 Вебинар приурочен к старту онлайн-курса «Python Developer» для начинающих Python-разработчиков.
Нативная интеграция. Информация о продукте www.otus.ru
#вопросы_с_собеседований
Что такое и чем отличается 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. Они обладают расширенным функционалом и лучше взаимодействуют с другими объектами.
#вопросы_с_собеседований
В чем отличие @foobar
от @foobar()
?@foobar
и @foobar()
— это разные способы применения декораторов.@foobar
применяет декоратор без аргументов, а @foobar()
применяет декоратор с аргументами.
То есть @foobar()
вызывает декоратор foobar, передавая ему аргументы, а затем результат (декорированная функция) применяется к функции.
👉 Запустите собственную LLM, представленную на HuggingFace!
Уже сегодня в 20:00 мск на открытом уроке в OTUS мы обсудим что такое большая языковая модель, какие есть предобученные модели.
🔹 Поработаем с API ChatGPT, запустим предобученную RuGPT3.
🔹 Посмотрим примеры работы с подходами Zero-shot, Few-shot.
🔹Обсудим, как можно дообучать LLM на небольших видеокартах с помощью LORA модификаторов.Вебинар приурочен к старту онлайн-курса «Machine Learning. Professional» в OTUS
📌 Результаты урока:
Вы узнаете как работать с API ChatGPT, запускать собственную LLM, представленную на HuggingFace, работать с LORA модификаторами моделей
👉 РЕГИСТРАЦИЯ
https://otus.pw/fLFF/Нативная интеграция. Информация о продукте www.otus.ru
Завершение программы
sys.exit() — это функция, которая позволяет завершить выполнение программы и возвратить код возврата операционной системе.
Принимает один необязательный числовой аргумент — код возврата программы. По умолчанию это 0, что означает успешное завершение, а код возврата отличный от нуля сигнализирует об ошибке или нештатной ситуации.
Используется для завершения программы в случае критической ошибки, когда продолжение работы невозможно и позволяет гибко управлять кодами возврата в зависимости от ситуации.
#это_база