Что представляют собой генераторы в Python, как функционирует метод send() в этих генераторах и каким образом его можно применять для управления их поведением?
Генераторы в Python представляют собой функции, которые применяют оператор yield для возврата значений и временной приостановки выполнения. С помощью метода send() можно отправлять данные обратно в генератор, которые затем могут быть использованы при следующем возобновлении его работы. Это делает генераторы двусторонними, позволяя не только получать значения, но и передавать данные внутрь.
Библиотека собеса по Python
Библиотека собеса по Python
👍4
Какова роль параметров _value и __value?
— одинарное подчеркивание в начале имени указывает на то, что этот параметр не предназначен для использования за пределами функции. Это всего лишь соглашение, а не строгое правило языка.
— двойное подчеркивание обозначает, что это имя зарезервировано Python для специальных целей, таких как init для конструктора класса. Такие параметры могут выполнять дополнительные функции.
Библиотека собеса по Python
_value__valueБиблиотека собеса по Python
Вопрос с собеса: Как реализовать память агента?
Если вы просто подаёте историю сообщений в контекст — вы джун. Сеньор использует State Management.
В LangGraph это реализовано архитектурно:
— управляемый поток (ветвления, возвраты, итерации);
—
— безопасность (лимиты шагов).
Разберитесь, как это работает, на нашем курсе. Поток уже стартовал.
Записаться на курс
Смотреть вводную лекцию
Если вы просто подаёте историю сообщений в контекст — вы джун. Сеньор использует State Management.
В LangGraph это реализовано архитектурно:
— управляемый поток (ветвления, возвраты, итерации);
—
state как типизированная память процесса;— безопасность (лимиты шагов).
Разберитесь, как это работает, на нашем курсе. Поток уже стартовал.
Записаться на курс
Смотреть вводную лекцию
Что означают параметры _value и __value?
: одиночное подчеркивание в начале имени указывает на то, что этот параметр не предназначен для использования за пределами функции. Это всего лишь соглашение, а не ограничение языка.
: двойное подчеркивание в начале имени обозначает, что это имя зарезервировано Python для специальных целей, таких как init для конструктора класса. Такие параметры могут выполнять дополнительные функции.
Библиотека собеса по Python
_value__valueБиблиотека собеса по Python
Что такое замыкание?
Замыкание (closure) — это функция, которая запоминает значения переменных из области видимости, в которой она была создана, и может получить к ним доступ, даже если она будет вызвана за пределами этой области видимости.
Ключевым моментом является то, что замыкание запоминает ссылки на переменные, а не сами значения. Это позволяет обращаться к актуальным значениям переменных даже после того, как функция, создавшая замыкание, завершила работу.
Обычно замыкания используются, если нужно:
— Создать функцию с сохранением некоторого состояния между вызовами.
— Избежать использования глобальных переменных и повысить инкапсуляцию.
— Частично применить функцию без вызова (создание другой функции).
В Python замыкания реализуются элегантно и просто с помощью вложенных функций. Это мощный механизм, позволяющий писать короткий и чистый код.
Библиотека собеса по Python
Ключевым моментом является то, что замыкание запоминает ссылки на переменные, а не сами значения. Это позволяет обращаться к актуальным значениям переменных даже после того, как функция, создавшая замыкание, завершила работу.
Обычно замыкания используются, если нужно:
— Создать функцию с сохранением некоторого состояния между вызовами.
— Избежать использования глобальных переменных и повысить инкапсуляцию.
— Частично применить функцию без вызова (создание другой функции).
В Python замыкания реализуются элегантно и просто с помощью вложенных функций. Это мощный механизм, позволяющий писать короткий и чистый код.
Библиотека собеса по Python
👍4❤1
Как управлять состоянием в асинхронном Python?
Если речь про AI-агентов, то правильный ответ в 2026 —
Вас спросят:
— Как избежать бесконечных циклов в агенте? (Ответ:
— Как хранить историю диалога между перезапусками? (Ответ:
— Как реализовать ветвление логики? (Ответ:
Разберитесь в теме сейчас, чтобы уверенно отвечать на собесах.
Записаться на курс
База для подготовки: Смотрите вводный урок бесплатно.
Если речь про AI-агентов, то правильный ответ в 2026 —
LangGraph.Вас спросят:
— Как избежать бесконечных циклов в агенте? (Ответ:
recursion_limit).— Как хранить историю диалога между перезапусками? (Ответ:
Checkpointers).— Как реализовать ветвление логики? (Ответ:
Conditional Edges).Разберитесь в теме сейчас, чтобы уверенно отвечать на собесах.
Записаться на курс
База для подготовки: Смотрите вводный урок бесплатно.
Можно ли объявлять функцию внутри другой функции? Где она будет видна?
Да, функции можно объявлять внутри других функций. Такая вложенная функция будет видна и доступна для вызова только внутри родительской функции, в которой она определена.
Это называется замыканием и позволяет ограничить область видимости вложенной функции, чтобы она не загрязняла глобальное пространство имен.
Вложенные функции могут быть полезны, когда нужно реализовать вспомогательную логику, связанную только с работой родительской функции.
Библиотека собеса по Python
Это называется замыканием и позволяет ограничить область видимости вложенной функции, чтобы она не загрязняла глобальное пространство имен.
Вложенные функции могут быть полезны, когда нужно реализовать вспомогательную логику, связанную только с работой родительской функции.
Библиотека собеса по Python
Как решить проблему конфликта зависимостей?
Конфликт зависимостей может возникнуть, когда два разных пакета требуют разные версии одной и той же зависимости.
Эту проблему можно решить с помощью менеджера пакетов pipenv, который автоматически устанавливает версии таким образом, чтобы они не конфликтовали друг с другом.
Вместо requirements.txt pipenv предоставляет файл pipenv с версиями пакетов.
При этом один из недостатков pipenv состоит в том, что создание файла pipenv занимает очень много времени.
Для проверки наличия конфликта зависимостей у пакета можно использовать команду pip check.
Библиотека собеса по Python
Эту проблему можно решить с помощью менеджера пакетов pipenv, который автоматически устанавливает версии таким образом, чтобы они не конфликтовали друг с другом.
Вместо requirements.txt pipenv предоставляет файл pipenv с версиями пакетов.
При этом один из недостатков pipenv состоит в том, что создание файла pipenv занимает очень много времени.
Для проверки наличия конфликта зависимостей у пакета можно использовать команду pip check.
Библиотека собеса по Python
👍4❤🔥1
В чем разница между модулем, пакетом и библиотекой?
Модуль — это просто файл Python, который предназначен для импорта в скрипты или в другие модули. Он содержит функции, классы и глобальные переменные.
Пакет — это набор модулей, которые сгруппированы вместе внутри папки для обеспечения согласованной функциональности. Пакеты могут быть импортированы точно так же, как модули. Обычно в них есть init.pyfile, который указывает интерпретатору Python обрабатывать их.
Библиотека — это набор пакетов.
Библиотека собеса по Python
Пакет — это набор модулей, которые сгруппированы вместе внутри папки для обеспечения согласованной функциональности. Пакеты могут быть импортированы точно так же, как модули. Обычно в них есть init.pyfile, который указывает интерпретатору Python обрабатывать их.
Библиотека — это набор пакетов.
Библиотека собеса по Python
👍4
мКак вычислить среднее значение, медиану, моду, дисперсию, стандартное отклонение и различные квантильные диапазоны в Pandas?
✔️ DataFrame.mean(): среднее
✔️ DataFrame.median(): медиана
✔️ DataFrame.mode(): мода
✔️ DataFrame.var(): дисперсия
✔️ DataFrame.std(): стандартное отклонение
✔️ DataFrame.quantile(): для расчета квантильного диапазона, используя значение диапазона в качестве параметра
Библиотека собеса по Python
✔️ DataFrame.median(): медиана
✔️ DataFrame.mode(): мода
✔️ DataFrame.var(): дисперсия
✔️ DataFrame.std(): стандартное отклонение
✔️ DataFrame.quantile(): для расчета квантильного диапазона, используя значение диапазона в качестве параметра
Библиотека собеса по Python
👍5
Как отвечать на вопросы про LLM-разработку?
Спрос на Python-разработчиков, умеющих работать с агентами, растёт. Курс «Разработка ИИ-агентов» — это способ быстро освоить актуальный стек.
Что изучим на практике:
—
— протоколы
— интеграцию векторных баз данных;
— безопасность и оптимизацию агентов.
Первая лекция уже доступна. Посмотрите её, чтобы понимать тренды и увереннее чувствовать себя на интервью.
Записаться
Смотреть лекцию
Спрос на Python-разработчиков, умеющих работать с агентами, растёт. Курс «Разработка ИИ-агентов» — это способ быстро освоить актуальный стек.
Что изучим на практике:
—
LangFlow и AutoGen;— протоколы
MCP и A2A;— интеграцию векторных баз данных;
— безопасность и оптимизацию агентов.
Первая лекция уже доступна. Посмотрите её, чтобы понимать тренды и увереннее чувствовать себя на интервью.
Записаться
Смотреть лекцию
Чем «data»-дескриптор отличается от «non-data», как это влияет на порядок поиска атрибута, и почему @property — это тоже дескриптор?
В Python любой объект с __get__ — дескриптор.
Non-data дескриптор: имеет только __get__. Проигрывает записи в obj.__dict__. @property — именно non-data дескриптор.
Data дескриптор: имеет __set__ и/или __delete__. Имеет приоритет над obj.__dict__, блокируя прямую подмену.
Порядок разрешения атрибутов (__getattribute__): data-denoscriptor → obj.__dict__ → non-data denoscriptor/атрибут класса → __getattr__.
Пишите свой data-дескриптор для переиспользуемой логики: валидация, типизация, lazy/кэш, связка с внешними ресурсами.
Библиотека собеса по Python
Non-data дескриптор: имеет только __get__. Проигрывает записи в obj.__dict__.
Data дескриптор: имеет __set__ и/или __delete__. Имеет приоритет над obj.__dict__, блокируя прямую подмену.
Порядок разрешения атрибутов (__getattribute__): data-denoscriptor → obj.__dict__ → non-data denoscriptor/атрибут класса → __getattr__.
Пишите свой data-дескриптор для переиспользуемой логики: валидация, типизация, lazy/кэш, связка с внешними ресурсами.
Библиотека собеса по Python
❤2👍1
Вопрос с собеседования: «Как реализовать память в LLM-приложении?»
Если в 2026 году вы ответите «просто передам всю историю переписки», вы не пройдёте. Контекстное окно всё ещё стоит денег, а RAG стал стандартом.
На курсе мы разбираем профессиональные паттерны: Summary Memory, Vector Store Memory, Entity Memory. Мы учим строить архитектуру, которая эффективна и масштабируема. Это то, что отличает джуна от сильного разработчика.
Что прокачаем:
— Работу с асинхронностью в Python (для стриминга токенов).
— Проектирование сложных пайплайнов на
— Интеграцию агентов с внешними API и базами данных.
Узнать подробности курса
Если в 2026 году вы ответите «просто передам всю историю переписки», вы не пройдёте. Контекстное окно всё ещё стоит денег, а RAG стал стандартом.
На курсе мы разбираем профессиональные паттерны: Summary Memory, Vector Store Memory, Entity Memory. Мы учим строить архитектуру, которая эффективна и масштабируема. Это то, что отличает джуна от сильного разработчика.
Что прокачаем:
— Работу с асинхронностью в Python (для стриминга токенов).
— Проектирование сложных пайплайнов на
LangGraph.— Интеграцию агентов с внешними API и базами данных.
Узнать подробности курса
Какой метод использовался до оператора in для проверки наличия ключа в словаре?
До появления оператора in в Python, чтобы проверить, содержит ли словарь определенный ключ, использовался метод словаря has_key().
Этот метод принимал в качестве аргумента проверяемый ключ и возвращал логическое значение - True, если ключ присутствовал в словаре, и False - если нет.
В Python 2.5 появился более понятный и краткий оператор in, поэтому сейчас рекомендуется использовать именно его, а has_key() считается устаревшим.
Библиотека собеса по Python
Этот метод принимал в качестве аргумента проверяемый ключ и возвращал логическое значение - True, если ключ присутствовал в словаре, и False - если нет.
В Python 2.5 появился более понятный и краткий оператор in, поэтому сейчас рекомендуется использовать именно его, а has_key() считается устаревшим.
Библиотека собеса по Python
👍6
Почему @dataclass(eq=True) без frozen по умолчанию не хэшируем?
Потому что при наличии __eq__ и изменяемости нарушается инвариант хэша; Python выставляет __hash__ = None. Нужно либо frozen=True (тогда хэш генерится), либо явно определить __hash__/использовать unsafe_hash=True на свой риск.
Библиотека собеса по Python
Библиотека собеса по Python
👍3
Что такое подгенератор (subgenerator)?
Подгенератор создается с помощью конструкции yield from внутри генератора.
Использование подгенераторов позволяет разбить генератор на несколько частей для упрощения кода и оптимизации памяти. Это полезный инструмент при работе с последовательностями.
Механизм передает значения между генераторами без сохранения всей последовательности в памяти и блокирует основной генератор до полного завершения подгенератора.
Библиотека собеса по Python
Использование подгенераторов позволяет разбить генератор на несколько частей для упрощения кода и оптимизации памяти. Это полезный инструмент при работе с последовательностями.
Механизм передает значения между генераторами без сохранения всей последовательности в памяти и блокирует основной генератор до полного завершения подгенератора.
Библиотека собеса по Python
🤔4👍2
Миксин — это
Миксины не предназначены для
class NowMixin:
def now(self):
return datetime.datetime.utcnow()
class Logger(NowMixin):
pass
logger = Logger()
print(logger.now())
— В названиях миксинов часто добавляют суффикс Mixin, чтобы
— Миксин — это технически
— Позволяет избежать
Библиотека собеса по Python
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2
Сопрограмма (coroutine) — это
— писать асинхронный код без коллбеков
— выполнять неблокирующие операции в одном потоке
— использовать кооперативную многозадачность
Библиотека собеса по Python
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Что такое GIL в CPython, как он влияет на многопоточность, и какие практики выбирать для CPU-bound и I/O-bound задач?
GIL — глобальная блокировка интерпретатора в CPython: одновременно байткод исполняет только один поток.
CPU-bound: потоки не масштабируются по ядрам → берите процессы (multiprocessing/процесс-пулы), векторизацию/библиотеки, которые освобождают GIL (напр. NumPy), нативные расширения или вынос в отдельные сервисы.
I/O-bound: потоки подходят (блокирующие I/O обычно отпускают GIL); альтернативно — asyncio с неблокирующими вызовами.
Важно: asyncio не ускоряет CPU-bound; смешивайте — тяжёлое CPU выносите в процессы/С, блокирующее I/O — в пул потоков; измеряйте и следите, чтобы в async-код не просачивались блокировки.
Имплементации: поведение касается CPython; в других реализациях Python механизм отличается.
Библиотека собеса по Python
CPU-bound: потоки не масштабируются по ядрам → берите процессы (multiprocessing/процесс-пулы), векторизацию/библиотеки, которые освобождают GIL (напр. NumPy), нативные расширения или вынос в отдельные сервисы.
I/O-bound: потоки подходят (блокирующие I/O обычно отпускают GIL); альтернативно — asyncio с неблокирующими вызовами.
Важно: asyncio не ускоряет CPU-bound; смешивайте — тяжёлое CPU выносите в процессы/С, блокирующее I/O — в пул потоков; измеряйте и следите, чтобы в async-код не просачивались блокировки.
Имплементации: поведение касается CPython; в других реализациях Python механизм отличается.
Библиотека собеса по Python
👍3
Объясни, как Django управляет транзакциями: autocommit, transaction.atomic() (savepoint’ы и «broken» состояние), ATOMIC_REQUESTS, когда нужен select_for_update(), и что учитывать с CONN_MAX_AGE/PgBouncer.
По умолчанию autocommit: каждый ORM-запрос, меняющий БД, — своя транзакция. atomic() начинает транзакцию (или создаёт savepoint при вложенности); исключение помечает блок как broken → откат до ближайшего savepoint/транзакции; при выходе — commit или rollback. ATOMIC_REQUESTS=True автоматически оборачивает view, но может растягивать транзакции (долгие I/O, внешние вызовы) — применять выборочно. select_for_update() требует активной транзакции (atomic()), в Postgres можно nowait/skip_locked для борьбы с блокировками. Изоляция — та, что у БД (обычно READ COMMITTED). Соединения: CONN_MAX_AGE удерживает их открытыми; в проде обычно PgBouncer (session/transaction mode), следи за совместимостью с server-side курсорами и длительными транзакциями.
Библиотека собеса по Python
Библиотека собеса по Python
👍1
Как и для чего используется %s?
%s — это Спецификатор формата и он используется для форматирования строк.
Он позволяет вставлять значения других типов (числа, объекты и т. д.) в строковые выражения, автоматически преобразуя их к строковому представлению.
%s заменяется на строковое представление переданного значения в процессе форматирования. Это удобный способ интерполяции строк.
Помимо простой интерполяции, %s полезен для оформления вывода данных в консоль, логгирования, составления SQL-запросов с подстановкой значений и других задач работы со строками.
Библиотека собеса по Python
Он позволяет вставлять значения других типов (числа, объекты и т. д.) в строковые выражения, автоматически преобразуя их к строковому представлению.
%s заменяется на строковое представление переданного значения в процессе форматирования. Это удобный способ интерполяции строк.
Помимо простой интерполяции, %s полезен для оформления вывода данных в консоль, логгирования, составления SQL-запросов с подстановкой значений и других задач работы со строками.
Библиотека собеса по Python
👍1