ITDEAL
1.11K subscribers
749 photos
108 videos
11 files
572 links
Разработка комплексных IT решений для бизнеса и частных заказчиков.

Чат: @pybytes_chat

Founder: @lunasantrope
Download Telegram
Замыкания в Python (часть 2)

😎 Замыкания являются очень полезными в функциональном программировании, к примеру, можно реализовать каррирование (currying) — техника преобразования функции, которая принимает несколько аргументов, в последовательность функций, где каждая принимает один аргумент. Создадим простую функцию для сложения чисел:


def add(x, y):
return x + y

🙂 Чтобы реализовать каррирование нужно воспользоваться замыканием, добавив внутрь еще одну функцию. Новая функция будет выглядеть так:


def curried_add(x):
def add_y(y):
return x + y
return add_y


👀 Таким образом каждая функция в цепочке принимает только один аргумент, а сами цепочки могут быть куда длинее. Каррирование позволяет фиксировать некоторые аргументы функции, создавая новую, которая принимает оставшиеся.


🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
3
Тестирование с Python (часть 4)

🖥 Фикстуры (fixtures) — это набор условий, который необходимо настроить перед выполнением тестов и очистить после их выполнения. Это может гарантировать, что каждый тест начнется в равных условиях вне зависимости от среды. Сегодня разберемся с следующуми типами фикстур: setUp и tearDown.

🔤 setUp — вызывается перед каждым тестовым методом в тестовом классе. Обычно используется для инициализации объектов и создания тестовых данных.

🔤 tearDown — вызывается после каждого тестового метода. В нём обычно выполняется очистка после тестов, например, закрытие файлов или удаление тестовых данных.

🥱 А объектом нашего теста станет примитивная реализация стека — способ организации данных, который работает по принципу «последним пришёл, первым вышел». Главные методы — push() и pop(). Push() позволяет добавлять элементы в конец стека, pop() — получать последний элемент стека.

👀 Документация unittest ТУТ.

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
42👍1
Тестирование с Python (часть 5)

🖥Сегодня мы закончим фикстуры (fixtures) встроенного модуля unittest. Существует еще два вида фикстур: уровня класса и уровня модуля. Работают они по одинаковому принципу, однако синтаксис отличается.

🙂 Для создания классовых фикстур используются два метода: setUpClass и tearDownClass. Эти методы вызываются только один раз перед запуском первого теста в классе. Используются, к примеру, для подключения к базе данных. Они являются классовыми методами, поэтому их нужно продекорировать с помощью @classmethod.


@classmethod
def setUpClass(cls):
pass


☺️ Для создания модульных фикстур используются две функции: setUpModule и tearDownModule. Они вызываются только один раз перед запуском любых тестов в модуле. Это место для настройки ресурсов, которые нужны во время всего времени выполнения модуля.


def setUpModule():
pass


🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
2
Ближайшее будущее ИИ

🖥 Недавно в сети появился подробный прогноз ближайшего будущего ИИ. Документ был написан бывшим сотрудником OpenAI — Leopold Aschenbrenner, и его размер составляет 165 страниц.

🧠 Создатель предпологает, что к 2027 году достижение AGI (Artificial General Intelligence) считается вполне возможным. Это вторая ступень ИИ, которая должна успешно выполнять любые интеллектуальные задачи, которые под силу человеку.

💥 Также сотрудник говорит, что на этом прогресс не остановится и будет очень быстро развиваться до уровня ASI (Artificial superintelligence). Этот вид ИИ должен обладать полным самосознанием и быть умнее человека.

‼️ Документ в итоге подчеркивает необходимость срочных мер по защите и контролю над развивающимися технологиями ИИ, чтобы избежать возможных угроз. Почитать можно тут: КЛИК

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
31
Forwarded from ITDEAL
🚀🌐 ВАКАНСИЯ: Go Developer 🌐🚀


Требования к кандидату:
➡️ Go: Уверенное знание языка, опыт написания и отладки кода.
➡️ Blockchain: Понимание основ (децентрализация, консенсусные алгоритмы, транзакции, смарт-контракты).
➡️ База данных: Опыт работы с SQL и NoSQL.
➡️ Git, IDE, дебаггеры
➡️ Работа в команде: Эффективное взаимодействие, коммуникативные навыки. Готовность обучаться
➡️ Docker
➡️ Solidity


Софт-скилы:
➡️ Коммуникабельность: Способность четко и эффективно общаться в команде.
➡️ Работа в команде: Опыт работы в командной среде, умение слушать и высказывать свое мнение.
➡️ Самостоятельность: Готовность принимать ответственность за свою работу и проявлять инициативу.


🤖 Контакты @lunasantrope
Please open Telegram to view this post
VIEW IN TELEGRAM
2
Валидация данных в Python (часть 1)

🖥 Python — это язык динамической типизации, таким образом, указывать типы данных явно не надо. Это ведет к тому, что одной переменной можно присвоить совершенно другое значение. С версии 3.5 в Python есть аннотации типов, однако — это всего лишь подсказка. При неверном типе переменной код все равно продолжит работу.

🥱 Чтобы решить эту проблему, есть два пути: перейти на другой язык или использовать библиотеку Pydanticсамая популярная библиотека для валидации данных. Она позволяет создавать модели данных и автоматически может проверить, правильный ли тип у переменной.

🔤 Чтобы создать нашу первую модель данных, нужно создать класс, который будет наследоваться от класса BaseModel. А дальше просто указать атрибуты и их тип. Pydantic может автоматически понимать аннотации типов Python, если у переменной будет неправильный тип данных — работа прекратится, и будет вызвана ошибка ValidationError.

📌 Также такие классы очень похожи на dataclasses, ведь такие методы, как, к примеру, __init__() и __repr__() будут созданы автоматически.

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
3
Валидация данных в Python (часть 2)

🫣 Если у вас довольно запутанный и необычный тип данных, к примеру, в имени должно быть строго два пробела, то в таком случае одним из решений будет создание собственной валидации. Для этого Pydantic предлагает нам несколько декораторов, один из них это @field_validator. Он используется для проверки конкретных полей.

👀 Чтобы проверить одно поле, нужно создать метод и продекорировать его с помощью @field_validator. В качестве аргумента нужно передать имя поля, и можно передать аргумент mode. У mode есть два вида: after и before. Первый говорит, что нужно применить валидатор после основной валидации, а второй говорит, что валидатор идет перед.


@field_validator('age', mode='after')
@classmethod
def validate_age(cls, age):
pass


📌 Также стоит упомянуть, что это классовые методы, поэтому первое, что они получают — это сам класс, а не его объект. Поэтому документация рекомендует использовать декоратор @classmethod, чтобы обеспечить правильную проверку типа.

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
👍42
🙄Сон для слабых

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
4
Валидация данных в Python (часть 3)

😎 Для более подробной и точной настройки полей моделей Pydantic предлагает нам использовать функцию Field. Первое, что приходит на ум — значения по умолчанию. С помощью Field это очень легко сделать.


from pydantic import BaseModel, Field

class User(BaseModel):
name: str = Field(default=‘Max‘)


🙂 Если в поле name ничего не будет передано, то там будет стоять строка «Max». Также, если мы хотим передать вызваемый объект, который будет генерировать данные для значения по умолчанию, то можно воспользоваться аргументом default_factory.

👀 Однако на этих двух аргументах функционал Field только начинается. Field применяется очень часто и является основным компонентом, поэтому для полного понимания я вам настоятельно рекомендую ознакомиться с документацией.

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32
Шаблоны проектирования (введение)

🖥 Шаблоны проектирования (design patterns) это типичные решения часто возникающих проблем. Это не готовые фрагменты кода, а общие концепции, которые вы можете настроить и менять для улучшения читаемости и применяемости вашего кода.

😩 Однако не стоит путать паттерны с алгоритмами. Алгоритм — это четкий набор действий для достижения конкретной цели, а шаблон — это описание решения более высокого уровня. Код одного и того же паттерна в разных программах может быть разным. Все шаблоны можно разделить на 3 основные группы:

🔤 Порождающие шаблоны (creational patterns) — предоставляют механизмы создания объектов, которые повышают гибкость и повторное использование существующего кода.

🔤 Структруные шаблоны (structural patterns) — объясняют, как объеденить объекты и классы в более сложные структуры, при этом сохраняя гибкость этих структур.

🔤 Поведенческие шаблоны (behavioral patterns) — заботятся об эффективном общении и распределении обязанностей между объектами.

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
6
😄 Каждый решает сам

🔝 PyBytes Media | Telegram / 📷Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
6
Шаблоны проектирования (часть 1)

🙂 Паттерн «Одиночка» (Singleton) — это один из порождающих шаблонов проектирования (creational patterns), который используется для создания класса, имеющего только один экземпляр в системе, и предоставляющего глобальную точку доступа к этому экземпляру.

👀 Это означает, что в рамках проекта может существовать только один объект данного класса, и любой запрос на создание нового экземпляра будет возвращать ссылку на уже существующий. Такой паттерн может быть полезен, к примеру, при работе с базой данных, когда вам нужно обеспечить только одно соеденение во всем коде.

😭Такой паттерн может улучшить производительность кода, однако не стоит использовать его часто. «Одиночка» может вызвать проблемы с тестированием и требует особого внимания в многопоточной среде. Также такой паттерн нарушает принцип единой ответственности (SRP).

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
4
Шаблоны проектирования (часть 2)

😎 Паттерн «Цепочка обязанностей» (Chain of Responsibility) — это поведенческий шаблон проектирования (behavioral pattern), который передает запросы последовательно по цепочке обработчиков — классов. Каждый обработчик решает, может ли он обработать запрос после чего передает запрос дальше по цепочке.

☺️ Представьте, что вам нужно обработать HTTP-запрос, где вы должны выполнить аутентификацию пользователя, выдать соответствующие права и выполнить валидацию данных. Чтобы код выглядел более понятно и структуризировано, каждый этап можно отделить в отдельный класс-обработчик, после чего создать цепочку.

👀 Класс-обработчик должен уметь обрабатывать запрос и желателно должен обладать методом для установки следующего звена для удобного создания цепочки. «Цепочка обязанностей» соответствует принципам OCP и SRP, что делает код более гибким для изменений. Однако паттерн делает отладку сложнее и не гарантирует, что каждый запрос будет обработан.

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
This media is not supported in your browser
VIEW IN TELEGRAM
14
Typing | Модуль аннотации (часть 1)

🙂 Разбирая валидацию данных с Pydantic, я упомянул аннотации типов. Они позволяют указать желаемый тип переменной в помощь разработчикам и IDE. Однако в Python для этого есть целый встроенный модуль typing, который очень хорошо работает вместе с Pydantic.

👀 Этот модуль позволяет расширить наши аннотации, с помощью него можно создавать пользовательские типы данных, использовать специальные типы и много другое. Однако я еще раз напоминаю, что в самом Python это никак не влияет на исполнение кода, это всего лишь подсказка.

🔤 Первое, что можно сделать вместе с typing, это указакать желаемые типы данных, к примеру, в словаре. Dict[str, int] — такая конструкция говорит, что ключи в словаре должны быть строкой, а значения числом.

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
3
Валидация данных в Python (часть 4)

🙂 Сериализация (serialization) — процесс преобразования объектов в удобный для хранения и передачи формат. В Pydantic, конечно же, для этого все предусмотрено. Основные методы для конвератции модели и ее полей это model_dump() и model_dump_json().

👀 Оба метода очень похожи, однако первый просто конвертирует модель и подмодели в обычный словарь, а второй возвращает строку в формате JSON. Также у методов есть немало полезных аргументов, к примеру, с помощью include и exclude можно указать какие поля стоит оставить или исключить.

🔤 Если нам недостаточно обычной конвертации, то мы можем создать собственную сериализацию. Для этого есть два декоратора: @field_serializer и @model_serializer. Первый используется, чтобы настроить сериализацию конкретных полей, а второй — всей модели.

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Typing | Модуль аннотации (часть 2)

🚶‍♀️ Сегодня мы разберем довольно полезные функции встроенного модуля typing: TypeVar и Annotated. На работу чистого Python кода функции никак не влияют, однако, к примеру, Pydantic умеет с этим работать и распознавать новые типы.

🔤 TypeVar — это класс, который используется для создания обобщённых типов (generics) в функциях и классах. Он позволяет создавать шаблоны, которые могут работать с различными типами данных. Также одним из полезных параметров ялявется bound, который может ограничить типы, которые могут быть присвоены обобщённому типу.

🔤 Annotated — это специальная функция, которая используется для добавления метаданных к аннотациям типов. Если типы, созданные с помощью TypeVar, обычно распознаются IDE, то метаданные созданы для внешних библиотек и инструментов.

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
3
Валидация данных в Python (заключительная часть)

🥱 И наконец нельзя не рассказать про допольнительный модуль Pydantic — Pydantic Settings. Этот модуль позволяет загружать настройки или классы конфигурации из переменных среды или секретных файлов. Модуль очень мощный и широко применяется популярными библиотеками, к примеру, FastAPI.

🔤 Чтобы его установить, нужно воспользоватся следующей командой: pip install pydantic-settings. Потом нужно создать новую модель, но этот раз она должа наследоваться от BaseSettings. Функционал такой же как и у BaseModel, однако инициализатор попытается прочитать все поля, которые не были переданы в качестве аргументов из переменных среды.

👀 Это может быть полезно для сохранения конфиденциальности и в принципе это упрощает работу с окружением. Также с помощью SettingsConfigDict можно устанавливать некоторые настройки, к примеру, указать, что переменные должны быть считаны из специального .env файла.

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21
This media is not supported in your browser
VIEW IN TELEGRAM
**Основано на реальных событиях**

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍3
Вся суть фронтенда 🙄

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
3
Шаблоны проектирования (часть 3)

🥱 Шаблон «Стратегия» (Strategy) — поведенческий паттерн (behavioral pattern), который предлагает определить семейство алгоритмов, поместить каждый в отдельный класс и сделать их объекты взаимозаменяемыми.

👀 Представим, что в коде есть всего один класс, отвечающий за навигацию. Каждый раз, когда вы хотите добавить новый вид построения маршрута, (автомобильный, пешеходный и т.д.), вам приходится этот класс изменять, что не очень удобно и может испортить уже работающий код.

😎 «Стратегия» предлагает выделить все алгоритмы маршрутов в отдельные классы — стратегии, а в изначальном классе навигации — контексте, создать поле для хранения ссылки на один из алгоритмов. Контекст не выбирает алгоритм, он просто делегирует работу связанному объекту стратегии.

📌 Этот паттерн используется довольно часто, он соблюдает принцип OCP и значительно повышает гибкость кода. Однако, если у вас немного алгоритмов, использовать паттерн смысла нет — он просто раздует код, к тому же многие языки программирования позволяют сделать все тоже самое без дополнительных классов.

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2