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

Чат: @pybytes_chat

Founder: @lunasantrope
Download Telegram
Различие между Iterable и Iterator

😎В Python, Iterable и Iterator играют ключевые роли в итерации, но они выполняют разные функции.

- Iterable - это объект, который можно превратить в итератор. Это могут быть списки, словари, кортежи и т.д. Они поддерживают итерацию, но не сохраняют состояние итерации. Главное - наличие метода iter.

- Iterator - это продвинутый объект, сохраняющий состояние итерации и позволяющий перебирать элементы один за другим. Он имеет методы iter и next.

import collections
print(issubclass(list, collections.Iterator)) # False


Этот код демонстрирует, что список (list) не является итератором, так как не проходит проверку на подкласс Iterator.

🔄 Для преобразования iterable в iterator используется функция iter(). Iterator можно итерировать только один раз.

numbers = [1, 2, 3]
numbers_iter = iter(numbers)

print(next(numbers_iter)) # 1
print(next(numbers_iter)) # 2
print(next(numbers_iter)) # 3
try:
⠀⠀print(next(numbers_iter)) # Вызовет исключение StopIteration
except StopIteration:
⠀⠀print("Итерация завершена.")


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

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram / 📈Mentor Service
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥6😈2
TypeVar: Основы и определение [Часть 1]

📌TypeVar в Python используется для создания переменных типа, что позволяет функциям и классам быть агностичными к конкретным типам. Это улучшает гибкость и читаемость кода, особенно при работе с обобщенными типами.


from typing import TypeVar

T = TypeVar('T') # Объявление TypeVar


🔍Использование TypeVar позволяет функциям принимать параметры разных типов, сохраняя при этом строгую типизацию. Это особенно полезно в обобщенных функциях и классах.


def identity(value: T) -> T:
⠀⠀return value


📈В этом примере функция identity может принимать и возвращать значение любого типа, сохраняя его тип между входом и выходом. Это позволяет использовать одну и ту же функцию с различными типами данных, не теряя при этом информации о типе (которая сохраняется в статистическом анализаторе, на пример PyCharm или MyPy)

😎Использование TypeVar в Python делает код более гибким и понятным, а также помогает избежать ошибок, связанных с типизацией. Это ключевая особенность для создания эффективных и безопасных обобщенных типов.

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram / 📈Mentor Service
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤‍🔥3😈2
TypeVar: Ограничения [Часть 2]

🍤В Python, TypeVar может быть ограничен, что позволяет указать, какие типы могут быть использованы. Это делает код более безопасным и предсказуемым, ограничивая типы, которые могут быть переданы в функцию или класс.


from typing import TypeVar

T = TypeVar('T', int, float) # Ограничение TypeVar значениями типов int и float


🙄При ограничении TypeVar, функции и классы становятся менее гибкими, но более специализированными. Это улучшает безопасность типов и помогает предотвратить ошибки во время выполнения.


def sum_numbers(a: T, b: T) -> T:
⠀⠀return a + b


📊В этом примере функция sum_numbers может принимать только целые числа или числа с плавающей точкой. Попытка передать значения других типов приведет к ошибке типизации.

🛠Ограничения TypeVar полезны для создания API, где важно контролировать типы входных и выходных данных. Это помогает обеспечить корректность работы программы и упрощает отладку.

🔝Использование ограничений в TypeVar помогает сделать ваш код более безопасным и понятным, улучшая взаимодействие между различными частями программы.


🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram / 📈Mentor Service
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥4💋2
Как Python создает объекты [Часть 1]

🚀Понимание процесса создания объектов в Python критически важно для глубокого освоения языка и разработки эффективного кода. Объекты - это основа ООП (Объектно-Ориентированного Программирования), а Python - язык с динамической типизацией, где все является объектом.

🔍 При создании объекта Python сначала вызывает метод new класса. Этот метод отвечает за выделение памяти для объекта. Он возвращает новый, еще не инициализированный объект указанного класса. Этот этап важен, поскольку позволяет контролировать процесс выделения памяти, что может быть полезно в более сложных сценариях создания объектов.


class MyClass:
⠀⠀def __new__(cls):
⠀⠀⠀⠀print("Создание объекта")
⠀⠀⠀⠀return super().__new__(cls)


🛠 Затем Python вызывает метод init этого объекта, который отвечает за инициализацию нового объекта. В этом методе происходит настройка объекта, например, присвоение начальных значений атрибутам.


class MyClass:
⠀⠀def __init__(self):
⠀⠀⠀⠀print("Инициализация объекта")
⠀⠀⠀⠀self.attribute = "Значение"


Этот процесс создания и инициализации объектов лежит в основе работы с классами в Python и позволяет разработчикам гибко управлять поведением своих объектов.

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram / 📈Mentor Service
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥4😈2
Создание обобщенных классов в Python [Часть 1]

ℹ️ Обобщенные классы в Python — это фундамент для создания гибких и типобезопасных структур данных. Их использование критически важно в крупных проектах для обеспечения читаемости и поддерживаемости кода.

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

Пример простого обобщенного класса:


from typing import Generic, TypeVar

T = TypeVar('T')
class Box(Generic[T]):
⠀⠀def __init__(self, item: T):
⠀⠀⠀⠀self.item = item


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

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram / 📈Mentor Service
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥2💋2
QUIZ: Чему будет равен "l" в конце?
l = [1, 2, 3, "bytes"]
l[:3] = "py"
Anonymous Quiz
29%
["py"]
33%
[1, 2, "py", "bytes"]
23%
["p", "y", "bytes"]
14%
["p", "y", 3, "bytes"]
8👍3
Метаклассы в Python [Часть 1]

🔍Метаклассы - это "классы классов". Они определяют правила и поведение для классов так же, как обычные классы определяют поведение для своих экземпляров. Это может показаться запутанным, но на самом деле метаклассы играют важную роль в Python, позволяя нам контролировать создание классов на более глубоком уровне.

☕️ Зачем они нужны? Прежде всего, метаклассы используются для создания API, которые могут интерактивно модифицировать или расширять поведение классов. Например, они могут добавлять новые методы или атрибуты, а также вмешиваться в процесс наследования классов.


class Meta(type):
⠀⠀pass

class MyClass(metaclass=Meta):
⠀⠀pass


🛠 В этом базовом примере Meta является метаклассом для MyClass. Пока Meta не добавляет никакой функциональности, он служит хорошим стартом для понимания структуры метаклассов.

🌐 Использование метаклассов открывает новые возможности для настройки и расширения классов Python. Это мощный инструмент в руках опытного разработчика.

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram / 📈Mentor Service
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥4😈21
🛠 Новый проект: 👉 КЛИК


➡️ next.js
➡️ tailwind
➡️ effector
➡️ python
➡️ sqlalchemy
➡️ postgres
➡️ typing
➡️ pydantic
➡️ fastapi


🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram / 📈Mentor Service
Please open Telegram to view this post
VIEW IN TELEGRAM
6🔥1
ITDEAL pinned «🛠 Новый проект: 👉 КЛИК ➡️ next.js ➡️ tailwind ➡️ effector ➡️ python ➡️ sqlalchemy ➡️ postgres ➡️ typing ➡️ pydantic ➡️ fastapi 🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram / 📈Mentor Service»
Метаклассы в Python [Часть 2]

🤩 Влияние метаклассов на Python. Метаклассы влияют на структуру Python, определяя, как классы создаются. Каждый раз, когда вы создаете новый класс, Python ищет метакласс для определения того, каким образом должен быть создан класс.

🫡 Процесс создания класса: Обычно, когда вы определяете класс, Python следует трём шагам:
1. Он определяет все атрибуты класса.
2. Он создает пространство имен для этих атрибутов.
3. Он связывает имя класса с этим пространством имен.

💡Как метаклассы вмешиваются: Метаклассы изменяют этот процесс, позволяя нам влиять на каждый из этих шагов. Например, метакласс может автоматически добавлять новые методы или атрибуты во все создаваемые классы.


class Meta(type):
⠀⠀def __new__(cls, name, bases, dct):
⠀⠀⠀⠀# Добавляем новый метод к классу
⠀⠀⠀⠀dct['new_method'] = lambda self: 'Hello'
⠀⠀⠀⠀return super().__new__(cls, name, bases, dct)
⠀⠀
class MyClass(metaclass=Meta):
⠀⠀pass
⠀⠀
# MyClass теперь имеет new_method
print(MyClass().new_method()) # Выведет 'Hello'


🛠 Этот пример показывает, как метакласс Meta добавляет метод new_method ко всем классам, для которых он используется как метакласс. Это демонстрирует, как метаклассы могут модифицировать или расширять классы в Python.

☝️ В прикрепленной картинке вы найдете часто встречающийся пример использования метаклассов - паттерн Singleton.

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram / 📈Mentor Service
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥2🌭2👍1💋1😈1
Logging в Python [Часть 1]

😈 Мы все любим использовать print для отладки и понимания того, что происходит в нашем коде. Это как оставлять себе небольшие записки, чтобы не забыть, как работает наша программа. Однако, постоянное добавление и удаление этих print может превратиться в хаос, особенно когда проект растет.

📌 Когда дело доходит до серьезной разработки, использование print становится плохой практикой. Оно не предлагает уровней гранулярности или гибкости, которые предоставляет logging. С logging вы можете устанавливать уровни сообщений, фильтровать их и направлять в различные места, не изменяя код.


import logging
logging.basicConfig(level=logging.INFO)
logging.info("This is an info message")


🔄 Заменить print на logging не только улучшит читаемость кода, но и позволит вам контролировать, какие сообщения отображаются, когда и где. Это особенно важно для больших проектов или при работе в команде.

🛠 Попробуйте использовать разные уровни логирования, такие как DEBUG, INFO, WARNING, ERROR, и CRITICAL, для более эффективного управления выводом вашего кода. Таким образом, вы сможете легко отличить важные сообщения от обычных уведомлений.

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram / 📈Mentor Service
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥4💋3
Введение в асинхронное программирование в Python [Часть 1]

🔍 Асинхронное программирование в Python начало набирать популярность с введением модуля asyncio. Это парадигма, позволяющая программам выполнять множество задач одновременно, что особенно полезно для I/O задач, таких как веб-запросы, чтение и запись файлов.

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


import time
⠀⠀
def count():
⠀⠀print("Один")
⠀⠀time.sleep(1) # Имитация длительной операции
⠀⠀print("Два")
⠀⠀
def main():
⠀⠀for _ in range(3):
⠀⠀⠀⠀count()
⠀⠀
main()


🚀 В отличие от этого, асинхронное программирование позволяет выполнять другие задачи во время ожидания, тем самым повышая общую эффективность и производительность программы.

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

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram / 📈Mentor Service
Please open Telegram to view this post
VIEW IN TELEGRAM
4🔥4😨2
Основы `asyncio`: Event loop и корутины [Часть 2]

❤️ В сердце асинхронного программирования в Python лежит понятие Event loop. Это центральный цикл событий, который управляет выполнением всех асинхронных операций. Event loop отслеживает все запущенные корутины и обеспечивает их выполнение, переключаясь между ними в нужные моменты.

💡Корутины - это особые функции, выполнение которых можно приостановить и возобновить в любой момент. Они определяются с помощью синтаксиса async def и предназначены для использования с await, который приостанавливает выполнение корутины, позволяя Event loop обрабатывать другие задачи.


import asyncio
⠀⠀
async def hello():
⠀⠀print('Hello')
⠀⠀await asyncio.sleep(1)
⠀⠀print('World')


➡️Важно понимать, что корутины сами по себе не выполняются автоматически. Для их выполнения они должны быть переданы в Event loop с помощью функций asyncio.run(), loop.create_task() или через ожидание с await.


asyncio.run(hello())


💫 Понимание этих основ является ключевым для глубокого изучения асинхронного программирования в Python. В следующих частях мы рассмотрим, как работать с асинхронными функциями и управлять асинхронными задачами.

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram / 📈Mentor Service
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥7🔥3🙈2
Работа с асинхронными функциями: `await`, `async with`, `async for` [Часть 3]


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


async def fetch_data():
⠀⠀# Представим, что это асинхронный запрос к базе данных
⠀⠀await asyncio.sleep(2) # Задержка имитирует время ожидания данных
⠀⠀return {'data': 1}

async def main():
⠀⠀data = await fetch_data()
⠀⠀print(data)


🔓Асинхронный контекстный менеджер async with используется для гарантии корректного управления асинхронными ресурсами, такими как открытие и закрытие файлов или соединений с базой данных.


async def read_file():
⠀⠀async with aiofiles.open('filename', 'r') as f:
⠀⠀⠀⠀content = await f.read()
⠀⠀⠀⠀print(content)


🔄Асинхронный итератор async for используется для итерации по асинхронно генерируемым последовательностям, например, при постепенном получении данных из веб-сервиса.


async def get_data():
⠀⠀for i in range(5):
⠀⠀⠀⠀await asyncio.sleep(1)
⠀⠀⠀⠀yield i

async def main():
⠀⠀async for item in get_data():
⠀⠀⠀⠀print(item)


😠 Использование этих асинхронных инструментов позволяет писать чистый и понятный код, который легко поддерживать и масштабировать. В следующей части мы углубимся в создание и управление задачами.

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram / 📈Mentor Service
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥5🔥3👾2
Я тут чуть работаю
Как ваши делишки там?
8🔥5
Создание и управление задачами в "asyncio" [Часть 4]

❤️В асинхронном программировании под задачами понимаются запущенные корутины, которые управляются event loop. С помощью asyncio, можно не только запускать корутины, но и создавать задачи, которые позволяют более гибко управлять асинхронными операциями.


async def count():
⠀⠀print("One")
⠀⠀await asyncio.sleep(1)
⠀⠀print("Two")


🚀Чтобы запустить корутину как задачу, используйте asyncio.create_task(). Это позволит вашей программе продолжать выполнение, не дожидаясь окончания корутины.


async def main():
⠀⠀# Создание задачи
⠀⠀task = asyncio.create_task(count())
⠀⠀print("Counting...")
⠀⠀# Дождемся выполнения задачи
⠀⠀await task


➡️Управление задачами дает вам возможность отменять их, устанавливать таймауты и обрабатывать исключения, что приносит дополнительную гибкость в асинхронное программирование.


async def main():
⠀⠀task = asyncio.create_task(count())
⠀⠀await asyncio.sleep(0.5)
⠀⠀task.cancel()
⠀⠀try:
⠀⠀⠀⠀await task
⠀⠀except asyncio.CancelledError:
⠀⠀⠀⠀print("Task was cancelled!")


❤️‍🔥Создание задач в asyncio открывает новые возможности для более эффективного и гибкого управления асинхронными операциями. В следующей части мы рассмотрим примеры реального использования asyncio и распространенные паттерны.

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram / 📈Mentor Service
Please open Telegram to view this post
VIEW IN TELEGRAM
4🔥4😈2
🚀🌐 Вакансия: User Acquisition Manager / Таргетолог

Привет 👋 Мы ищем опытного специалиста в сфере GameDev, который ранее работал с играми или геймерами.

Требования:

Важно: Вы ранее работали с играми из Steam, либо App Store и Google Play

➡️ Понимание рекламных кабинетов: Google, META, Unity, Twitter, Reddit (Знание дополнительных будет плюсом)
➡️ Запуск и ведение рекламных кампаний, анализ и оптимизация кампаний в реальном времени
➡️ Тестированием креативов, поиском трендов и новых идей, подготовкой ТЗ для моушен-дизайнеров
➡️ Организация тестов новых инструментов и фич на рекламных платформах
➡️ Умение пользоваться инструментами аналитики, умение работать с текстами



Контакты 👉 @spaceitnikita
Please open Telegram to view this post
VIEW IN TELEGRAM
3❤‍🔥3🥰2
🚀🌐 ВАКАНСИЯ: Sales Manager

Мы ищем опытного Sales Manager, готового внести свой вклад в развитие компании и поиск новых клиентов! 🚀


Обязанности и задачи:

➡️ Продажа продуктов и услуг компании (поставка оборудования и ПО)
➡️ Анализ рынка, поиск потенциальных клиентов, выход на ЛПР
➡️ Проведение переговоров на уровне первых лиц компаний, выявление и формирование потребности
➡️Выстраивание и развитие эффективных долгосрочных взаимоотношений с заказчиками
➡️ Организация полного цикла работы с клиентами: от первого контакта до реализации решения и контроля оплаты
➡️ Создание воронок продаж для поиска и привлечения клиентов
➡️ Тесное взаимодействие с различными отделами производства при оценке проекта и подготовке КП
➡️ Инициация проекта после продажи: управление ожиданиями клиента, дебрифинг команды, контроль подписания документов и оплат.


Требования к кандидату:

➡️ Успешный опыт продаж ИТ услуг, инфраструктурных решений, программного обеспечения в B2B, B2G сегменте от 3 лет
➡️ Опыт работы с веб-проектами, понимание современных веб-технологий
➡️ Опыт работы с крупными корпоративными и/или государственными заказчиками
➡️ Уверенные коммуникативные навыки, умение работать в команде, ориентация на результат


Ключевые навыки:

➡️ Навыки презентации
➡️ Деловая коммуникация
➡️ Управление проектами
➡️ Навыки переговоров
➡️ Ведение переговоров
➡️ Знание английского от B2
➡️ Подготовка КП
➡️ Навыки продаж


🤖 Контакты @lunasantrope
Please open Telegram to view this post
VIEW IN TELEGRAM
4🔥2
Дескрипторы в Python [Часть 1]

➡️Дескрипторы - мощный инструмент в Python, позволяющий программистам контролировать доступ к атрибутам объекта. Этот механизм широко используется в стандартной библиотеке Python, и понимание его принципов откроет перед вами новые возможности для эффективного и гибкого кодирования.

💡Важность дескрипторов заключается в том, что они дают нам прямой контроль над тем, что происходит, когда атрибут объекта читается, записывается или удаляется. Это достигается за счет реализации специальных методов в классе дескриптора: get, set и delete.

🔍Пример базового использования дескриптора для чтения атрибута:

class Descriptor:
⠀⠀def __get__(self, instance, owner):
⠀⠀⠀⠀return 'значение'

class MyClass:
⠀⠀descriptor = Descriptor()

obj = MyClass()
print(obj.descriptor) # Выведет: значение


🎓Дескрипторы находят широкое применение в Python. Например, декоратор property - это на самом деле дескриптор, который мы в дальнейшем попробуем воссоздать, чтобы лучше понять его работу и возможности.

❤️‍🔥В следующих постах мы рассмотрим, как создать свой дескриптор с методами get и set, обсудим продвинутые техники их использования и приведем практические примеры, которые помогут вам интегрировать дескрипторы в свои проекты.

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram / 📈Mentor Service
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥72😈2👍1
🚀🌐 ВАКАНСИЯ: Human Resources (HR)

Мы ищем опытного HR, готового внести свой вклад в развитие компании и поиск новых работников! 🚀
Оклад: 1000-2000$ в месяц 💲


Обязанности и задачи:

➡️ Наём новых сотрудников в компанию.
➡️ Создание кадрового резерва.
➡️ Организация стажировок и адаптация новых кадров.
➡️ Мониторинг и анализ рынка труда.
➡️ Создание системы мотивации. (штрафы/вознаграждения)
➡️ Устранение эмоциональных проблем внутри коллектива.
➡️ Контроль за уровнем знаний работников.
➡️ Организация обучения сотрудников.
➡️ Координирование работы по повышению квалификации.
➡️ Составление трудовых договоров и ведение личных дел сотрудников, выявление КПД.
➡️ Проведение кадровых перестановок.
➡️ Подготовка предложений по распределению бюджетных средств на решение вопросов, связанных с отделом кадров.


Требования к кандидату:

➡️ Понимание ИТ услуг, инфраструктурных решений, программного обеспечения в B2B, B2G сегменте от 3 лет
➡️ Опыт работы с веб-проектами, понимание современных веб-технологий
➡️ Опыт работы с крупными корпоративными и/или государственными заказчиками
➡️ Уверенные коммуникативные навыки, умение работать в команде, ориентация на результат


Ключевые навыки:

➡️ Организация командной работы
➡️ Стрессоустойчивость
➡️ Разработка системы премирования и штрафов
➡️ Навыки презентации
➡️ Деловая коммуникация
➡️ Навыки переговоров
➡️ Знание английского от B2


🤖 Контакты @lunasantrope
Please open Telegram to view this post
VIEW IN TELEGRAM
4🤩2🏆1
Дескрипторы в Python [Часть 2]

😆 Реализация простого дескриптора начинается с понимания методов get и set. Эти методы позволяют контролировать доступ к атрибуту класса.

💡 В примере ниже мы создаем дескриптор для управления атрибутом, который должен быть всегда положительным:


class PositiveNumber:
⠀⠀def __init__(self):
⠀⠀⠀⠀self.value = 0
⠀⠀
⠀⠀def __get__(self, instance, owner):
⠀⠀⠀⠀return self.value
⠀⠀
⠀⠀def __set__(self, instance, value):
⠀⠀⠀⠀if value < 0:
⠀⠀⠀⠀⠀⠀raise ValueError("Значение должно быть положительным")
⠀⠀⠀⠀self.value = value
⠀⠀
class MyClass:
⠀⠀number = PositiveNumber()


🛠 Теперь, если мы попробуем присвоить отрицательное значение атрибуту number, Python выбросит исключение:


my_instance = MyClass()
my_instance.number = -5 # Выбросит ValueError


➡️Использование дескрипторов таким образом позволяет вам точно контролировать значения атрибутов, обеспечивая их корректность и предотвращая неправильное использование.

🔝 PyBytes Media | ✉️ Telegram / 📷 Instagram / 📈Mentor Service
Please open Telegram to view this post
VIEW IN TELEGRAM
4❤‍🔥2😈2