Обучающий канал по Python Ссылка для друга - https://t.me/+I7jrAQKR5xAyYTAy По всем вопросам @valentin_mascarov Реклама на бирже - https://telega.in/c/Python_per_month
👉 Подключайтесь 24 августа в 20:00 в OTUS к открытому уроку «Работа с пакетами в Python с помощью pip и poetry».
💪 На занятии разберем оба пакетных менеджера, поговорим про основные сценарии использования, обсудим различия, узнаем, в каких случаях можно обойтись решением попроще, а в каких случаях требуется более продвинутый подход.
В результате урока вы узнаете различия между пакетными менеджерами pip и poetry, научитесь применять пакетные менеджеры в работе.
👉 Для участия и получения записи зарегистрируйтесь https://otus.pw/HI5X/
📌 Вебинар приурочен к старту онлайн-курса «Python Developer» для начинающих Python-разработчиков.
Нативная интеграция. Информация о продукте www.otus.ru
«Циклический сбор мусора»
«Циклический сбор мусора» — это процесс автоматической уборки памяти, занимаемой объектами, которые больше не доступны вашей программе. В Python есть встроенный механизм сборки мусора, который автоматически освобождает память, занимаемую объектами, на которые нет ссылок.
Вы можете влиять на этот процесс с помощью модуля gc (garbage collector).
Обычно нет необходимости вручную управлять сборкой мусора, так как Python самостоятельно заботится о освобождении памяти. Однако в некоторых случаях, особенно при работе с большими объемами данных или встроенными объектами, ручное управление сборкой мусора может быть полезным.
#для_продвинутых
Сортировка пузырьком
Сортировка пузырьком (Bubble Sort) — это простой алгоритм сортировки, который многократно проходит через список, сравнивая пары соседних элементов и меняя их местами, если они стоят в неправильном порядке. Этот процесс повторяется до тех пор, пока весь список не будет отсортирован.
В данном коде функция bubble_sort
принимает список arr
, который нужно отсортировать. Основной цикл проходит по всем элементам списка, а вложенный цикл сравнивает соседние элементы и меняет их местами, если это необходимо. После завершения алгоритма, список будет отсортирован.
#для_продвинутых
Что такое args?
args — это сокращение от «arguments» (аргументы). Этот термин обычно используется в контексте определения функций с переменным числом аргументов.
Когда вы определяете функцию с *args в списке аргументов, это означает, что функция может принимать произвольное количество позиционных аргументов. args представляет собой кортеж (tuple), содержащий все переданные позиционные аргументы.
#для_начинающих
Контекстные менеджеры
Контекстные менеджеры (Context Managers) в Python представляют собой удобный способ для управления ресурсами и выполнения кода в определенных контекстах, таких как открытие и закрытие файлов, установка и освобождение блокировок, управление сетевыми соединениями и многие другие ситуации, требующие выполнения предварительных и завершающих операций.
Для создания своего собственного контекстного менеджера вам потребуется определить методы __enter__()
и __exit__()
в вашем классе. Метод __enter__()
выполняется при входе в контекст, а метод __exit__()
выполняется при выходе из контекста.
#для_начинающих
SciencePlotsSciencePlots
- это библиотека, которая предоставляет стили для библиотеки Matplotlib
, чтобы форматировать ваши графики для научных статей, презентаций и диссертаций.
Это может быть полезно для ученых, инженеров, студентов и любого, кто хочет создавать профессионально выглядящие графики в Python.
В этом примере мы устанавливаем стиль 'science'
из библиотеки scienceplots
. Затем мы создаем данные для графика и строим график. В конце мы отображаем график с помощью plt.show()
.
dict comprehensiondict comprehension
— это способ создания нового словаря путем применения выражения к каждому элементу другой последовательности, такой как список, кортеж или другой словарь. Это похоже на генератор списков, но результатом является словарь вместо списка.
#для_начинающих
__init____init__
является методом, который используется для инициализации объектов при создании экземпляров классов. Этот метод называется «конструктором» класса и выполняется автоматически при создании нового объекта данного класса.
Когда вы создаете новый объект путем вызова конструктора класса, передавая ему аргументы, эти аргументы могут быть использованы для установки начальных значений атрибутов объекта. Внутри метода __init__
вы можете определить, какие атрибуты должны быть созданы для объекта и как им присвоены начальные значения.
#для_начинающих
Фабричный метод
Фабричный метод (Factory Method) — это паттерн проектирования, который позволяет создавать объекты определенного типа через интерфейс или базовый класс, но делегирует фактическое создание конкретных объектов подклассам. Это способ позволяет легко добавлять новые типы объектов без изменения существующего кода.
Пример на картинке показывает основы паттерна «Фабричный метод» в Python. В реальных ситуациях можно создавать более сложные иерархии продуктов и создателей, чтобы обеспечить более гибкую и расширяемую структуру кода.
📱 Apple теперь в Telegram!
Подписывайтесь: @Apple
Метакласс
Метакласс (metaclass) в Python — это класс, который определяет поведение других классов, которые являются его экземплярами. В некотором смысле метакласс можно рассматривать как «класс для классов». Он задает правила и ограничения для создания и работы классов.
В Python метаклассы используются для контроля процесса создания классов, изменения их атрибутов и методов, а также для внесения различных модификаций в поведение классов и их экземпляров. Они предоставляют мощный инструмент для метапрограммирования, то есть программирования на уровне создания программного кода.
exceptions
В Python и многих других языках программирования, exceptions
(исключения) — это механизм, который позволяет обрабатывать ошибки и нестандартные ситуации во время выполнения программы. Когда возникает ошибка, Python генерирует исключение. Если исключение не обрабатывается, программа может завершиться с ошибкой.
В данном примере кода, операция x = 10 / 0
вызовет исключение ZeroDivisionError
, так как нельзя делить на ноль. Однако благодаря конструкции try
и except
, программа не завершится с ошибкой. Вместо этого будет выведено сообщение «Произошла ошибка деления на ноль!».
Бинарный поиск
Бинарный поиск — это эффективный алгоритм поиска элемента в отсортированном массиве. Он работает путем разделения массива пополам и сравнивает искомый элемент с элементом в середине массива. В зависимости от результата сравнения, половина массива, в которой элемент точно не может находиться, исключается из дальнейшего поиска. Этот процесс повторяется, пока не будет найден элемент или пока остается только один элемент в массиве.
В этом примере функция binary_search
принимает отсортированный массив arr
и искомый элемент target
. Она ищет элемент в массиве и возвращает его индекс, если он найден, и -1, если элемент отсутствует. Каждая итерация сужает диапазон поиска путем сравнения среднего элемента с искомым элементом и сдвига границ поиска в соответствии с результатом сравнения.
Нашли лучшие курсы по Python-разработке!
Tutortop — образовательный маркетплейс №1, где представлено более 5000 курсов от более чем 300 школ. Вы можете сравнить курсы по рейтингу, цене и отзывам, а еще купить дешевле, чем напрямую 🔥
Собрали для вас подборку лучших курсов для разработчиков по мнению пользователей tutortop:
— Профессия «Разработчик на Python с гарантией трудоустройства» от Skypro. Рейтинг 4.9 из 5. Скидка 15% по промокоду TUTORTOP до 13.08
— Курс «Python-разработчик с гарантией трудоустройства» от Eduson. Рейтинг 4.8 из 5. Скидка 5% по промокоду TUTORTOP до 13.08
— Курс «Разработчик Python» от Академии АйТи. Рейтинг 4.7 из 5.
Все эти курсы и десятки других можно найти и сравнить на tutortop⚡️
Чтобы стать востребованным программистом не обязательно покупать дорогущие курсы от известных школ.
Можно просто подписаться на канал «Бесплатные курсы IT» и следить за их анонсами.
Здесь каждый день публикуют образовательные программы по популярным направлениям в IT. Например:
📍UX/UI дизайнер
📍Тестировщик с нуля
📍Английский для IT специалистов
Еще больше интересного: @learnsu
unit-тесты
Unit-тесты (или unittests) — это метод тестирования ПО, который позволяет проверить, работает ли отдельная единица кода (обычно функция или метод) так, как ожидается. Библиотека unittest
входит в стандартную библиотеку Python и предоставляет набор инструментов для написания и выполнения тестовых сценариев.
Писать хорошие unit-тесты — это важный аспект разработки программного обеспечения. Хорошие тесты обеспечивают надежность и поддерживаемость кода, помогают выявлять ошибки и улучшать качество продукта.
#для_начинающих
Cтатический метод
В Python статический метод (staticmethod) — это метод, который привязан к классу, а не к экземпляру этого класса. Он не требует доступа к атрибутам и методам экземпляра, и может быть вызван независимо от создания экземпляра класса. Статические методы могут использоваться, например, для выполнения операций, которые связаны с классом в целом, но не требуют доступа к данным экземпляра.
Чтобы определить статический метод в классе, используется декоратор @staticmethod
.
#для_начинающих
Аннотации типов
Аннотации типов (type annotations) — это способ указания ожидаемых типов данных для аргументов функций, возвращаемых значений функций и переменных. Они позволяют явно указать, какие типы данных ожидаются или возвращаются, и могут быть использованы инструментами статического анализа для проверки соответствия типов.
Важно понимать, что аннотации типов являются средством документирования и помощи в статическом анализе, но они не влияют на реальное выполнение кода.
#для_начинающих
__slots____slots__
— это специальный атрибут в Python, который может использоваться в классах для определения списка атрибутов (полей), которые разрешено создавать для экземпляров этого класса. Он используется для оптимизации использования памяти и ускорения доступа к атрибутам.
Обычно, когда вы создаете экземпляр класса, Python создает словарь для хранения всех атрибутов этого экземпляра. Это занимает дополнительную память и может вызвать небольшое замедление при доступе к атрибутам. А использование slots
позволяет определить, какие атрибуты можно создавать для экземпляров класса, и Python будет использовать более компактное представление данных, что уменьшит расход памяти.
#для_продвинутых
Codeby Academy открывает осенний набор на один из своих лучших курсов - «Python для Пентестера»
Старт: 4 сентября
Длительность: 3 месяца
На курсе будем изучать продвинутые техники использования Python, научимся писать прикладной софт, который используется пентестерами в их профессиональной деятельности. Максимум практики, чат с живым общением и поддержка преподавателей!
🐍После 3-месячного онлайн-курса «Python для пентестера» вы сможете:
➡️Эффективно использовать базы данных и сеть Интернет;
➡️Получать данные от сайтов в автоматическом режиме;
➡️Писать прикладные программы на Python.
🏆 Выдаём сертификат при успешной сдаче экзамена
А по промокоду OFFZONE2023 вы получите дополнительную скидку 10%
📌 Узнать подробнее о курсе
Цикломатическая сложность
Цикломатическая сложность (Cyclomatic Complexity) — это метрика, используемая для оценки сложности кода на основе количества путей выполнения в программе. Эта метрика была предложена Томасом МакКейбом в 1976 году и обычно используется для определения того, насколько сложно будет тестирование и сопровождение данного кода.
Целью расчета цикломатической сложности является выявление потенциально сложных участков кода, которые могут быть трудными для понимания, тестирования и поддержки. Более высокая цифра цикломатической сложности обычно указывает на большую сложность кода.
#для_продвинутых
Паттерн проектирования «Фасад»
Паттерн проектирования «Фасад» (Facade) используется для предоставления унифицированного интерфейса к группе интерфейсов подсистемы. Он позволяет скрыть сложность и детали взаимодействия между различными компонентами системы, предоставляя клиенту более простой и удобный способ взаимодействия.
#для_продвинутых
Что такое _slots_?__slots__
— это особый атрибут класса, который позволяет определить ограниченное множество атрибутов (полей) для экземпляров данного класса. Использование __slots__
может существенно снизить расход памяти для объектов класса и ускорить доступ к атрибутам, но оно также вносит некоторые ограничения и ограничения.
Обычно вы можете добавлять атрибуты к объектам класса динамически, потому что они хранятся в словаре. Однако это может вызвать избыточные затраты на память и небольшое замедление доступа к атрибутам из-за поиска по словарю. Атрибуты, определенные через __slots__
, фактически резервируют место в памяти напрямую в экземпляре класса, что уменьшает объем памяти, требуемый для хранения объектов.
Дескрипторы
Дескрипторы — это механизм, который позволяет контролировать доступ к атрибутам классов. Они предоставляют способ определения специальных методов для доступа, присваивания и удаления атрибутов. Дескрипторы часто используются для реализации логики, связанной с доступом к данным, внутри классов.
Для создания дескриптора нужно определить класс, который реализует хотя бы один из трех вышеуказанных методов. Затем экземпляры этого класса могут быть присвоены атрибутам других классов.
Как работает thread locals?
Thread-local storage обеспечивает механизм для сохранения данных, которые будут доступны только в рамках определенного потока выполнения. Это полезно, когда вы хотите иметь раздельные данные для каждого потока, но не хотите делить их между разными потоками.
Вы можете использовать класс threading.local(), чтобы создать объект, который будет представлять thread-local storage. В этом объекте вы можете хранить любые данные, и они будут видимы только для текущего потока. Каждый поток будет иметь свою собственную копию объекта threading.local().
introspection
introspection — это способность программы анализировать свой собственный код и структуру во время выполнения. Это позволяет получать информацию о объектах, модулях, функциях, классах и других аспектах программы без необходимости заранее знать о них статически.
Например, в Python вы можете использовать функции и атрибуты, такие как dir()
, type()
, getattr()
, hasattr()
, locals()
, globals()
и другие, чтобы получить информацию о переменных, объектах и их атрибутах. Это может быть полезно при отладке, создании обобщенных функций или динамической загрузке модулей.
❗️Как развиваться Python-разработчику?
Наращивать объем знаний и навыков. За этим приходите на вебинар, приуроченный к старту онлайн-курса «Python Developer. Professional» в OTUS.
✅ 15 августа — «Code review»
Обсудим основы разработки API с помощью фреймворка FastAPI, рассмотрим пример небольшого приложения и осветим особенности развертывания эксплуатации.
🧑💻 Спикером выступит Станислав Ступников, руководитель разработки в VK. Эксперт с 10+ лет опыта промышленной разработки.
💪 Погрузим вас в современную «промышленную» разработку на Python. Главный фокус курса на основных Software Engineering компетенциях Python-разработчика и формировании прагматичного подхода к решению задач.
👉 ПРОЙТИ ТЕСТ для регистрации на открытый урок
https://otus.pw/LZMQ/Нативная интеграция. Информация о продукте www.otus.ru
Задача
У вас есть девять цифр: 1, 2, …, 9. Именно в таком порядке. Вы можете вставлять между ними знаки «+», «-» или ничего. У вас будут получаться выражения вида 123+45-6+7+89. Найдите все из них, которые равны 100.
Мне кажется, в таком виде его проще всего и писать и читать и тестировать. Тут у меня три функции: all_combinations — итератор, который выдает все числа для операций (в терминах задачи: вставляет пустые места); all_signs — выдаёт все возможные сочетания знаков + и - заданной длинны (для единообразия, это тоже итератор с рекурсией); perform_operations — выполняет операции.
Тут, конечно, просится решение, избавленное от if-ов и кодирования операций с помощью символов. Но это решение будет более громоздким, о нём можно рассказать, но и писать, и читать его дольше.
PyTorch
PyTorch — это библиотека машинного обучения, разработанная Facebook. Она позволяет создавать нейронные сети и обучать их на графических процессорах, что ускоряет процесс обучения и улучшает точность моделей.
В этом примере мы загружаем датасет MNIST с рукописными цифрами, создаем простую нейронную сеть с двумя полносвязными слоями и функцией активации ReLU
, обучаем ее с помощью стохастического градиентного спуска, а затем тестируем результат на отложенных данных.
При этом мы используем функцию потерь CrossEntropyLoss
, которая подходит для задач классификации, и оптимизатор SGD
.
Введение в машинное обучение с помощью scikit-learn (перевод документации)
Смотреть статью