Python академия
Открыть в Telegram
Учи Python быстро и легко. Ежедневно публикуем практические задачи, разборы, готовые решения, объяснения логики, советы по алгоритмам. ✔ Подходит для прокачки навыков кодирования. По всем вопросам @evgenycarter
Больше7 289
Подписчики
-424 часа
-27 дней
-4230 день
Архив постов
7 288
Цикл
Мы можем перевернуть строку и в цикле.
Для начала создадим массив (список) reversedString[].
После этого мы можем запустить цикл, где итерируемой переменной будет index — длина списка.
На каждой итерации цикла в reversedString добавляется символ из строки с индексом [index-1]. После этого index уменьшается на 1.
Цикл продолжается до тех пор, пока переменная index не станет равна 0.
Подписывайтесь на канал 👉@pythonofff
7 288
Добавляем классу большую функциональность
На прошлой неделе мы объясняли декоратор @classmethod, а сейчас рассмотрим @staticmethod.
@staticmethod можно воспринимать как метод, который "не знает, к какому классу относится". Он просто получает переданные аргументы, без неявного первого аргумента, и его определение не изменяется через наследование. Еще раз: статические методы прикреплены к классу лишь для удобства — и не могут менять состояние ни класса, ни его экземпляра.
Зачем использовать. Статические методы делают код более читабельным и повторно используемым. Его также удобнее использовать для импорта по сравнению с обычными функциями, поскольку функцию не нужно отдельно импортировать.
В чем же разница?
@classmethod используется в суперклассе для определения того, как метод должен вести себя, когда он вызывается разными дочерними классами.
@staticmethod используется, когда мы хотим вернуть объект, независимо от вызываемого дочернего класса.
Подписывайтесь на канал 👉@pythonofff
7 288
Многопоточность
В модуле threading новый поток выполнения может начинаться с нового threading.Thread и присвоения ему функции для выполнения.
Параметр target ссылается на функцию (или вызываемый объект), который будет работать. Нить не начнет выполнение до start, также не будет вызываться Thread объекта.
Когда my_thread завершается, вызов start выкинет исключение RuntimeError. Если вы хотите запустить Thread в фоновом режиме, то передавайте daemon=True или установите my_thread.daemon в True перед вызовом start().
Подписывайтесь на канал 👉@pythonofff
7 288
Создание и использование виртуальной среды
virtualenv — инструмент для создания изолированных сред Python. Программа создает папку, которая содержит все необходимые исполняемые файлы для использования пакетов, необходимых для проекта.
Создание новой виртуальной среды требуется только один раз для каждого проекта, для которого вы хотите изолировать зависимости:
python3 -m venv venv
Это создаст папку venv, содержащую оснастку сценариев и копию python самого двоичного файла. Название папки не имеет значения.
Чтобы активировать виртуальную среду, нужно запустить activate файл: source venv/bin/activate и далее мы можем свободно устанавливать любые зависимости, которые никак не скажутся на работе в будущих проектах.
Подписывайтесь на канал 👉@pythonofff
7 288
🔥Нужен серьёзный карьерный ап? OTUS начинает 16-ый набор онлайн-курса «Team Lead разработки» для тех, кто готов двигаться дальше!
👉Оставьте заявку и успейте в группу по спеццене
Хотите протестировать процесс обучения и познакомиться с преподавателями заранее? Регистрируйтесь на бесплатные вебинары:
— «Аутсорс/аутстафф/in-house разработка»: регистрация
— «5 пороков команды»: регистрация
🚀Регистрируйтесь сейчас — напомним перед вебинаром!
7 288
Тестирование на pytest
pytest — ближе по духу к языку Python нежели unittest, которая накладывает определенные обязательства при разработке тестов. Например, создание классов-наследников от TestCase или выполнение определенной процедуры запуска тестов.
Но при разработке на pytest ничего этого делать не нужно. Вы просто пишете функции, которые должны начинаться с "test_" и используете assert, встроенные в Python.
Также он поддерживает запуск тестов на unittest и nose, то есть полная обратная совместимость с ними.
Подписывайтесь на канал 👉@pythonofff
7 288
Добавляем классу большую функциональность
Декоратор @classmethod — это метод, который получает класс в качестве параметра, который принято обозначать как cls. Он указывает на класс ToyClass, а не на объект этого класса.
Методы класса привязаны к самому классу, а не его экземпляру. Они могут менять состояние класса, что отразится на всех объектах этого класса, но не могут менять конкретный объект.
Проще говоря, @classmethod — это обычный метод класса, имеющий доступ ко всем атрибутам класса, через который он был вызван.
Подписывайтесь на канал 👉@pythonofff
7 288
🔥Нужен быстрый буст до Девопса? Сделайте это всего за 3 месяца и 3 полных дня в неделю! Пройдите тест онлайн-курса для опытных айтишников «Буткемп DevOps» и поступите по спеццене.
👉🏻ПРОЙТИ ТЕСТ КУРСА БУТКЕМП DEVOPS
📌Хотите протестировать учебный процесс и познакомиться с преподавателями заранее? Регистрируйтесь на бесплатные вебинары:
— «Введение в Kubernetes»: регистрация
— «Написание скриптов на Bash»: регистрация
Регистрируйтесь сейчас — напомним перед вебинаром!
7 288
Вычисляем размер объектов в памяти
Чтобы вычислить размер какого-либо объекта, можно воспользоваться функцией sys.getsizeof(object[, default]). Поскольку Python написан в полном соответствии с парадигмой ООП, таким объектом может быть все что угодно.
Однако, следует помнить, что хотя все built-in (встроенные) объекты и вернут правильный размер, в общем случае это не должно быть верно для каких-либо пользовательских объектов.
Аргумент default позволяет определить значение, которое будет возвращено, если тип объекта не предоставляет средства для извлечения размера и вызовет TypeError .
Функция getsizeof вызывает метод __sizeof__ объекта и добавляет дополнительные служебные данные сборщика мусора, если конечно объект управляется сборщиком мусора.
Подписывайтесь на канал 👉@pythonofff
7 288
Not a Number
В модуле math есть особый объект, который называется NaN (Not a Number).
Эти объекты NaN не уникальны, и даже не равны самим себе, так что вы можете иметь несколько подобных объектов, взятых из нескольких разных источников.
Например можно создать подобный объект, просто передав строку 'nan' во float. Кстати говоря, это значит что вы можете использовать NaN в качестве ключа в словаре (хотя мы и не советуем это делать).
Подписывайтесь на канал 👉@pythonofff
7 288
🔥Заканчивается набор продвинутого онлайн-курса «Инфраструктурная платформа на основе Kubernetes» - чтобы попасть на курс по спецпредложению, пройдите вступительный тест!
👉🏻ПРОЙТИ ТЕСТ КУРСА ПО KUBERNETES
📌Хотите протестировать учебный процесс заранее? Регистрируйтесь на бесплатный вебинар в 20:00 мск 15 сентября — «Из каких частей состоит Kubernetes?»: регистрация
На вебинаре:
— узнаем, из каких основных и вспомогательных компонентов состоит kubernetes кластер;
— рассмотрим, за что отвечает каждый из них, и как они взаимодействуют между собой.
👉Экспертизой поделится Филипп Игнатенко, руководитель блока развития российской облачной платформы. Регистрируйтесь сейчас — напомним перед вебинаром!
7 288
Ускоряем код с помощью векторизации
Одним из приемов для ускорения работы циклов является векторизация вычислений, т. е. использование функций, которые поддерживают операции над векторами.
Вообще лучший способ ускорить любой цикл – это отказаться от него. В примере выше для работы с функцией my_func мы могли бы вызвать ее в цикле для каждого элемента списка, но гораздо проще использовать vectorize.
По сути, vectorize преобразует функцию таким образом, что она начинает принимать весь вектор целиком, а не отдельный его элемент. Надо помнить, что такой подход не всегда приводит к значительному ускорению.
Подписывайтесь на канал 👉@pythonofff
7 288
Вебинар «Пишем Websocket-сервер для геолокации на asyncio»
22 сентября в 19:00 мск Слёрм приглашаем на вебинар «Пишем Websocket-сервер для геолокации на asyncio» от наших партнеров KTS.
🐍На вебинаре создадим веб-сервис на Python с использованием библиотеки aiohttp. Он позволит делиться своим местоположением и отслеживать местоположение других подключённых к нему людей. И всё это в режиме реального времени — для этого как раз и нужны веб-сокеты.
Что будет на вебинаре:
🔹Рассмотрим недостатки веб-сокетов;
🔹Научимся работать с веб-сокетами из консоли;
🔹Научимся работать с веб-сокетами в aiohttp: отправлять и получать сообщения с сервера;
🔹Реализуем бизнес-логику геосервиса.
Записаться: https://slurm.club/3B84igu
7 288
Запрос пароля у пользователя
Множеству инструментов командной строки или скриптов для работы требуется имя пользователя и пароль. Если вам придётся писать подобную программу – вы, возможно, сочтёте полезным модуль getpass.
Этот очень простой пакет позволяет запрашивать у пользователя его пароль, а также получать имя пользователя, извлекая имя, под которым он вошёл в систему.
Подписывайтесь на канал 👉@pythonofff
7 288
Не используйте обработку исключений слишком часто
Обработка исключений может защитить вашу программу от внезапных сбоев. Тем не менее все прекрасно знают, что подобные конструкции могут заметно снизить производительность скрипта.
Не стоит злоупотреблять try-except конструкциями, так как в большинстве случаев можно справиться с задачей, применяя обычные условия. Используйте обработку исключений только в крайних случаях.
На картинке мы привели пример двух случаев необоснованного использования обработки исключений, а также показали более правильную альтернативу.
Подписывайтесь на канал 👉@pythonofff
7 288
Создание дочернего процесса
Метод os.fork() создаёт дочерний процесс в том же месте кода, вызывая системную функцию fork(), и возвращает PID (Process Identifier), который равен PID дочернего процесса в родительском процессе и нулю в новом.
Кстати, получается интересный случай, в коде примера выполняется и блок if, и else. Если не знать про os.fork() и посмотреть вывод подобного кода, то возникнет много вопросов.
Подписывайтесь на канал 👉@pythonofff
7 288
Дескрипторы
Дескриптор – это атрибут объекта со “связанным поведением”, то есть такой атрибут, при доступе к которому его поведение переопределяется методом протокола дескриптора. Если хотя бы один из этих методов определен в объекте, то можно сказать, что этот метод – дескриптор.
Для того, чтобы определить свой собственный дескриптор, обычно определяют три специальных метода класса __get__, __set__ или __delete__. После этого можно создать новый класс и в атрибут этого класса записать объект типа дескриптор.
У данного объекта будет переопределено поведение при доступе к атрибуту (__get__), при присваивании значений (__set__) или при удалении (__delete__).
Подписывайтесь на канал 👉@pythonofff
7 288
Разница между __str__ и __repr__
Оба магических метода __str__ и __repr__ используются для получения строкового представления объекта. Давайте разберемся, в чем же собственно разница между ними.
Метод __str__ используется для создания вывода для конечного пользователя, а __repr__ в основном используется для отладки и разработки. Другими словами, цель __repr__ – быть однозначным, а __str__ – читабельным.
Функция print() и встроенная функция str() используют метод __str__ для отображения строкового представления объекта, а вот встроенная функция repr() использует для этого метод __repr__.
Подписывайтесь на канал 👉@pythonofff
Уже доступно! Исследование Telegram 2025 — ключевые инсайты года 
