ru
Feedback
Python вопросы с собеседований

Python вопросы с собеседований

Открыть в Telegram

Вопросы с собеседований по Python @workakkk - админ @machinelearning_interview - вопросы с собесдований по Ml @pro_python_code - Python @data_analysis_ml - анализ данных на Python @itchannels_telegram - 🔥 главное в ит РКН: clck.ru/3FmrFd

Больше

📈 Аналитический обзор Telegram-канала Python вопросы с собеседований

Канал Python вопросы с собеседований (@python_job_interview) языкового сегмента Русский является активным участником. Сейчас сообщество объединяет 24 822 подписчиков, занимая 5 258 место в категории Технологии и приложения и 26 472 место в регионе Россия.

📊 Показатели аудитории и динамика

С момента создания невідомо проект демонстрирует стремительный рост, собрав аудиторию из 24 822 подписчиков.

Согласно последним данным от 25 августа, 2026, канал показывает стабильную активность. За последние 30 дней изменение числа участников составило -44, а за последние 24 часа — 0, при этом общий охват остаётся высоким.

  • Статус верификации: Не верифицирован
  • Уровень вовлечённости (ER): Средний показатель вовлечённости аудитории составляет 6.01%. В первые 24 часа после публикации контент обычно набирает 2.76% реакций от общего числа подписчиков.
  • Охват публикаций: В среднем каждый пост получает 1 492 просмотров. В течение первых суток публикация набирает 684 просмотров.
  • Реакции и взаимодействия: Аудитория активно поддерживает контент: среднее количество реакций на один пост — 6.
  • Тематические интересы: Контент сосредоточен на ключевых темах, таких как github, api, собеседование, git, docker.

📝 Описание и контентная политика

Автор описывает ресурс как площадку для выражения субъективного мнения:
Вопросы с собеседований по Python @workakkk - админ @machinelearning_interview - вопросы с собесдований по Ml @pro_python_code - Python @data_analysis_ml - анализ данных на Python @itchannels_telegram - 🔥 главное в ит РКН: clck.ru/3FmrFd

Благодаря высокой частоте обновлений (последние данные получены 28 августа, 2026) канал поддерживает актуальность и высокий уровень охвата публикаций. Аналитика показывает, что аудитория активно взаимодействует с контентом, что делает его важной точкой влияния в категории Технологии и приложения.

24 822
Подписчики
Нет данных24 часа
+637 дней
-4430 день
Архив постов
🐍 Python-совет: используй `functools.lru_cache` для ускорения "дорогих" функций Если у тебя есть функция, результат которой зависит только от входных данных, — кешируй её! Это может ускорить программы в 10–1000 раз, особенно при рекурсии или повторяющихся запросах. 🔧 Пример:

from functools import lru_cache

@lru_cache(maxsize=128)
def fib(n):
    if n < 2:
        return n
    return fib(n - 1) + fib(n - 2)

print(fib(100))
📌 Что делает lru_cache: • сохраняет результаты вызова функции • повторные вызовы с теми же аргументами → мгновенный возврат • maxsize ограничивает объём кэша (по принципу LRU — least recently used) 🔥 Без кеша fib(100) занимает минуты ⚡ С кешем — менее 1 секунды 🛠️ Применимо к: • рекурсивным вычислениям • функциям, вызывающим API • любым дорогим операциям с неизменяемыми аргументами 🧠 Вывод: @lru_cache — это одна строка, которая превращает тяжёлую функцию в реактивную. Идеально для оптимизации без изменения логики.

🐍 Хитрая задача для опытных Python-разработчиков Почему этот код не работает как ожидается?

def magic():
    return [lambda: i for i in range(5)]

funcs = magic()
results = [f() for f in funcs]
print(results)
На первый взгляд, ты ожидаешь результат:

[0, 1, 2, 3, 4]
Но на деле вывод будет:

[4, 4, 4, 4, 4]
🔍 Что пошло не так lambda: i не захватывает значение i, а замыкается на саму переменную i, которая одна и та же для всех лямбд. К моменту вызова всех функций i = 4 (последнее значение цикла), и все лямбды возвращают одно и то же. Это классический пример late binding — лямбда "вспоминает" переменную, а не её значение в момент создания. ✅ Как исправить Способ 1: фиксируем значение i через аргумент по умолчанию

def magic():
    return [lambda i=i: i for i in range(5)]

funcs = magic()
results = [f() for f in funcs]
print(results)
Теперь вывод:

[0, 1, 2, 3, 4]
Способ 2: functools.partial

from functools import partial

def f(x): return x
funcs = [partial(f, i) for i in range(5)]
results = [f() for f in funcs]
print(results)
🧠 Почему это важно Такие баги встречаются: - в колбэках и ивентах (например, при работе с GUI или CLI) - в генерации функций внутри циклов - в async-замыканиях и DSL-интерпретаторах - в тестовых фреймворках, где создаются сценарии динамически Понимание области видимости, замыканий и позднего связывания (late binding) — необходимый навык для confident-сеньора. @python_interview

🐍 Python-совет: ускоряй импорт и запуск с помощью `__main__` guard и lazy imports Когда ты пишешь утилиту или CLI‑скрипт, важно не загружать всё сразу. Используй if __name__ == "__main__" + отложенный импорт, чтобы ускорить запуск и избежать лишней инициализации. 🔧 Пример:

# script.py

def main():
    import argparse
    import time

    parser = argparse.ArgumentParser()
    parser.add_argument("--sleep", type=int, default=1)
    args = parser.parse_args()

    print("Start sleeping...")
    time.sleep(args.sleep)
    print("Done.")

if __name__ == "__main__":
    main()
📌 Почему это важно: • Импорты происходят только при запуске, а не при импорте модуля из другого файла • Снижается время запуска CLI-инструмента • Уменьшается нагрузка при unit-тестировании, если main() не нужен • Позволяет использовать файл как модуль и как скрипт 🛠️ Особенно эффективно при: • больших CLI-инструментах (`argparse`, rich, pandas и др.) • работе в средах, где startup time критичен (например, serverless) 🧠 Вывод: if __name__ == "__main__" + локальные импорты = чище, быстрее, гибче.

🔥 7 000+ упражнений на 76 языках программирования Exercism — бесплатная платформа для прокачки навыков программирования с ну
🔥 7 000+ упражнений на 76 языках программирования Exercism — бесплатная платформа для прокачки навыков программирования с нуля. Каждый язык — отдельный путь, наполненный практическими задачами. Главный плюс — обратная связь от опытных менторов. Ответы здесь не быстрые, зато по делу и без токсичности, как это бывает на Stack Overflow. https://exercism.org/

🔥 Самые нужные каналы для Python разработчика, чтобы расти в доходе 💸Python | Вопросы собесовPython | Вакансии с удаленкойPython | LeetCodePython | Тесты Подпишись, чтобы не потерять ☝️

Repost from Machinelearning
📚 ArXiv Research Agent — отличный помощник для научных исследований. Агент самостоятельно: • Найдёт релевантные статьи с arXiv, bioRxiv, medRxiv и Semantic Scholar • Проведёт полноценный обзор и поиск нужных материалов • Покажет, что упущено, и предложит, что добавить • Даст инсайты и цитаты из миллионов научных работ • Генерирует готовые конспекты И др. Вскоре обещают добавить поддержку MCP. 🔜 Попробовать: https://www.alphaxiv.org/assistant @ai_machinelearning_big_data #agent #ArXiv #ai #ml

👨‍💻 Executing — как заглянуть внутрь работающего Python-кода. Необычная библиотека, которая позволяет во время выполнения п
👨‍💻 Executing — как заглянуть внутрь работающего Python-кода. Необычная библиотека, которая позволяет во время выполнения программы определить, какой именно AST-узел выполняется в данный момент. Это может быть полезно для отладки, анализа кода или создания инструментов вроде умных traceback'ов. Проект использует хитрый трюк с модификацией AST и наблюдением за изменениями в байт-коде, чтобы точно определить текущую операцию. Хотя функционал кажется узкоспециализированным, его уже используют в нескольких известных инструментах: stack_data, snoop и даже IPython для улучшенного вывода ошибок. 🤖 GitHub @python_interview

🧐ИИ — помощник или угроза тестировщикам? В одних компаниях требуют использовать ChatGPT, в других за него можно получить "по
🧐ИИ — помощник или угроза тестировщикам? В одних компаниях требуют использовать ChatGPT, в других за него можно получить "по шапке". Кто прав? И можно ли вообще доверять искусственному интеллекту автоматизацию тестов? Честно поговорим о том, где ИИ реально помогает, а где — только мешает и плодит баги на открытом вебинаре "Риски и преимущества использования ИИ в тестировании " 17 июня в 19:00. Что будет: 💻Реальные кейсы: как ИИ помогает автоматизировать тестирование (и когда мешает) 💻Как выбрать нужный инструмент и не профакапить проект 💻Почему ИИ не заменит тестировщика (если вы не будете халтурить) 💻Как подружить Python + Docker + ChatGPT в CI/CD 💻Что делегируют ИИ ведущие инженеры уже сейчас Спикеры: 👨‍💻Павел Балахонов, QA Automation Lead в VK Tech (15+ лет опыта, CI/CD, Docker, автоматизация) 👨‍💻Викентий Лапа, тестировщик Whamcloud (Linux, кластерные файловые системы, Python) 🎁Подарки участникам: Чек-лист по автоматизации на Python Мини-гайд по Docker CLI Скидка 7% на курсы OTUS 17 июня, 19:00 МСК - бесплатно. Запишись, пока это за тебя не сделал ИИ - https://tglink.io/91c136fc6b6f Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. erid: 2W5zFGMCkac

🐍 Задача для собеседования на Python Условие:
def mystery(x, y):
    if x == 0:
        return y
    else:
        return mystery(x - 1, x + y)

result = mystery(3, 2)
print(result)
— Вопрос: что будет выведено в результате выполнения этого кода? Варианты ответов: А. 5 B. 8 C. 11 D. Ошибка рекурсии Правильный ответ: B. Пояснение: Функция mystery — это рекурсивная функция, которая накапливает сумму чисел от x до 1, прибавляя y в конце. @python_job_interview

Что выведет этот Python код ? #junior #python Задача для новичков. s = set() a = [1, 2, 3] s.add(tuple(a)) print(s) Списки изменяемы и не могут быть элементами множества, но кортежи — неизменяемы и хэшируемы, поэтому кортеж из списка успешно добавится во множество.

🐳 Что если вам нужно запустить чужой (возможно небезопасный) код? Представьте: вам прислали бинарник, Python-скрипт или npm-пакет, и его надо выполнить. Вы не знаете, что внутри — а вдруг там rm -rf /, попытка выйти из контейнера, майнер или установка root-доступа? 🔥 Первый инстинкт: запустить в Docker. Кажется, контейнер спасёт? ⚠️ На самом деле — не всегда. 🛑 Docker ≠ песочница Контейнеры по умолчанию не изолированы от ядра, сетей и сокетов хоста. Даже простое docker run -it ubuntu запускает процесс с root-доступом внутри контейнера. 🛡️ Что делать, если код небезопасен:

# Запуск без root-доступа
docker run --user 1000:1000 my-image

# Только для чтения
docker run --read-only my-image

# Удалить все cap-привилегии ядра
docker run --cap-drop=ALL my-image

# Использовать seccomp-профиль
docker run --security-opt seccomp=default.json my-image

# Отключить сеть
docker run --network=none my-image
Также стоит: • Настроить AppArmor / SELinux • Запретить монтирование Docker сокета • Ограничить доступ к /proc, /sys 💡 Вывод: Docker — это удобный инструмент упаковки, но не синоним безопасной изоляции. Если запускаете сторонний или user-generated код (плагины, CI-скрипты, sandbox-сервисы) — относитесь к нему как к потенциально опасному. Безопасность — это не "чеклист", а постоянная практика. #Docker #Security #Sandbox #DevOps #Isolation

🎓 Модульный учебник по Python для Middle-разработчиков Этот учебник создан для тех, кто уже пишет на Python, но хочет выйти
🎓 Модульный учебник по Python для Middle-разработчиков Этот учебник создан для тех, кто уже пишет на Python, но хочет выйти за рамки базовых конструкций. Здесь — практичные модули с упором на архитектуру, производительность, тестирование, чистый код и современные практики разработки. 🔧 Каждый модуль — это отдельный блок знаний: теория + реальные кейсы + трюки из индустрии. 🎯 Только то, что реально нужно миддлу: от дебага и профилирования до async, typing, CI/CD и LLM-интеграций. Без воды. С кодом. По делу. 📚 Читать @python_job_interview

Задача: Что делает эта странная функция teleport и почему она запускает цикл 32 раза? 🧠 Подсказка: На первый взгляд это выглядит как хаотичная мешанина побитовых операций, но на самом деле здесь происходит реверс битов (bitwise reversal) — отражение битов справа налево. Но вопрос — зачем делать это 32 раза подряд? 🔍 Что происходит: Каждый шаг в теле цикла — это стандартная техника реверса битов через маски и сдвиги: 0xAAAAAAAA, 0xCCCCCCCC, и т.д. — маски по битовым паттернам Итерация for _ in range(32) делает это снова и снова… 💣 Фишка: первый проход уже полностью отражает 32-битное число. Остальные 31 повтор возвращают число в исходное состояние — но в побитово инвертированном порядке! 📌 То есть: Чётное количество циклов — возвращает в исходную позицию Нечётное — делает реверс 👉 Ответ на teleport(0x12345678) будет реверс битов этого числа. Ожидаемое: 0x1e6a2c48 (в зависимости от реализации может отличаться). 🎯 Челлендж для продвинутых: Упростите функцию до одного вызова (без цикла) Напишите inverse_teleport(x), которая возвращает исходное число обратно 🧩 Эта техника используется в: — алгоритмах FFT (быстрые преобразования Фурье) — графике — реверсировании хэшей — low-level оптимизациях для SIMD

🐍 Задача на внимательность и понимание области видимости в Python: «Почему список не заполняется?» 🎯 Цель: Найти, почему переменная ведёт себя не так, как ожидается 📍 Ситуация: У тебя есть простой код, который должен собирать данные в список из файла:

results = []

def process_file(path):
    for line in open(path):
        if "error" in line:
            results.append(line.strip())

# где-то в другом месте:
process_file("logs1.txt")
process_file("logs2.txt")

print(f"Total errors: {len(results)}")
Но после запуска ты получаешь:
Total errors: 0
🙃 Хотя ты уверен, что в обоих файлах есть строки с "error". 🧩 Задача: 1. Почему список results остаётся пустым? 2. Почему нет ошибки при обращении к results.append(...)? 3. Что будет, если вместо append() просто написать results = [...] внутри функции? 4. Как правильно модифицировать глобальную переменную? 5. Как сделать поведение явным и безопасным? 🛠 Решение: 🔸 Проблема в области видимости переменных: Функция использует results, определённый вне функции, но не объявляет его как global. Однако results.append(...) — это допустимая операция, так как она не переназначает переменную, а вызывает метод объекта. Если бы внутри функции была строка results = [...], Python бы создал локальную переменную results, и тогда append бы вызывал UnboundLocalError. 🔸 Для ясности и чистоты кода лучше делать так:

def process_file(path, results):
    for line in open(path):
        if "error" in line:
            results.append(line.strip())

results = []
process_file("logs1.txt", results)
process_file("logs2.txt", results)
Или, если обязательно нужно использовать глобальную переменную:

results = []

def process_file(path):
    global results
    for line in open(path):
        if "error" in line:
            results.append(line.strip())
🔸 Проверка: - print(locals()) — покажет локальные переменные - print(globals()) — покажет глобальные 📌 Вывод: В Python изменение содержимого изменяемой глобальной переменной внутри функции возможно без global, но присваивание новой переменной требует явного global. Это тонкое поведение, которое часто приводит к ошибкам, особенно при работе со списками и словарями.

Repost from Machinelearning
✔️ Llama Nemotron Nano VL от NVIDIA — один из лучших OCR инструментов для работы с документами. Мультимодальная модель от NVI
✔️ Llama Nemotron Nano VL от NVIDIA — один из лучших OCR инструментов для работы с документами. Мультимодальная модель от NVIDIA уверенно занимает первое место на OCRBench v2, показав лучшую точность парсинга документов среди всех моделей. 📄 Что это такое: Llama Nemotron Nano VL — лёгкая vision-language модель для интеллектуальной обработки документов (IDP), которая: • разбирает PDF • вытаскивает таблицы • парсит графики и диаграммы • работает на одной GPU 🔍 Заточена под: – Вопрос-ответ по документам – Извлечение таблиц – Анализ графиков – Понимание диаграмм и дешбордов 🧠 Под капотом — vision-энкодер C-RADIO v2 (distilled multi-teacher трансформер), который справляется даже с визуальным шумом и высоким разрешением. 📊 OCRBench v2 — крупнейший двухъязычный бенчмарк для визуального анализа текста, и именно NVIDIA Nano VL показывает лучший результат. 🟡Hf 🟡 Подробнее @ai_machinelearning_big_data #Nemotron #NVIDIA

✔️ Llama Nemotron Nano VL от NVIDIA — один из лучших OCR инструментов для работы с документами. Мультимодальная модель от NVI
✔️ Llama Nemotron Nano VL от NVIDIA — один из лучших OCR инструментов для работы с документами. Мультимодальная модель от NVIDIA уверенно занимает первое место на OCRBench v2, показав лучшую точность парсинга документов среди всех моделей. 📄 Что это такое: Llama Nemotron Nano VL — лёгкая vision-language модель для интеллектуальной обработки документов (IDP), которая: • разбирает PDF • вытаскивает таблицы • парсит графики и диаграммы • работает на одной GPU 🔍 Заточена под: – Вопрос-ответ по документам – Извлечение таблиц – Анализ графиков – Понимание диаграмм и дешбордов 🧠 Под капотом — vision-энкодер C-RADIO v2 (distilled multi-teacher трансформер), который справляется даже с визуальным шумом и высоким разрешением. 📊 OCRBench v2 — крупнейший двухъязычный бенчмарк для визуального анализа текста, и именно NVIDIA Nano VL показывает лучший результат. 🟡Hf 🟡 Подробнее @ai_machinelearning_big_data #Nemotron #NVIDIA

🐍 Python-задача с подвохом: кто съел яблоко? У тебя есть список действий персонажей:

actions = [
    ("Alice", "picked"),
    ("Bob", "looked"),
    ("Charlie", "picked"),
    ("Bob", "dropped"),
    ("Alice", "dropped"),
    ("Charlie", "ate")
]
Каждое действие — это кортеж: (имя персонажа, действие). 📌 Правила: 1. Только тот, кто сначала "picked", может "ate". 2. Если кто-то "dropped", он больше не владеет объектом. 3. Нужно выяснить, кто съел яблоко, и проверить: мог ли он это сделать по правилам? 🧠 Задача: Напиши функцию who_ate(actions: list[tuple[str, str]]) -> str, которая возвращает: - "OK" — если всё законно - "CHEATER" — если съевший не имел права --- ✅ Решение с разбором: ```python def who_ate(actions): holding = set() eater = None for name, action in actions: if action == "picked": holding.add(name) elif action == "dropped": holding.discard(name) elif action == "ate": eater = name if name in holding: return "OK" else: return "CHEATER" return "NO ONE ATE" ``` 📌 **Как это работает:** - `holding` — это множество тех, кто в данный момент "держит" объект. - Как только кто-то `"ate"`, мы сразу проверяем: находится ли он в `holding`? - Если нет — значит, он **съел чужое яблоко**. Подмена! 🤯 --- 🔍 **Разбор на примере:** ```python # Charlie picked → OK # Charlie ate → всё ещё держит → OK print(who_ate([ ("Charlie", "picked"), ("Charlie", "ate") ])) # OK # Alice picked, потом dropped, потом ate → нарушила правила print(who_ate([ ("Alice", "picked"), ("Alice", "dropped"), ("Alice", "ate") ])) # CHEATER ``` --- 💡 Подвох в том, что многие решают задачу, просто считая количество действий, **не отслеживая актуальное владение** объектом. 📦 Задача хороша для собесов — проверяет внимание к деталям и мышление в терминах состояний.

🐍 **LibrePythonista — Python прямо в LibreOffice Calc** LibrePythonista — это бесплатное и открытое расширение, которое доба
🐍 **LibrePythonista — Python прямо в LibreOffice Calc** LibrePythonista — это бесплатное и открытое расширение, которое добавляет полноценную поддержку Python прямо в LibreOffice Calc. И да, оно уже поддерживает Pandas, Matplotlib и даже собственный PIP-менеджер пакетов! 💡 Что умеет LibrePythonista: • 📊 Создание DataFrame, Series и графиков прямо в ячейках • 📦 Встроенный PIP для установки дополнительных библиотек • 🔐 Локальное исполнение кода — ваши данные не покидают компьютер • 🧰 Использует OOO Dev Tools — не требует дополнительных расширений • 🧪 Пока в бете — можно влиять на развитие 📎 Больше не нужно колхозить скрипты или вручную подключать Pandas/Numpy — всё уже встроено. 🔗 Проект: https://github.com/LibreOffice/librepythonista 🚀 Открытый, мощный, гибкий — идеальный инструмент для тех, кто любит Python и таблицы.

Каким будет вывод этого кода?
Anonymous voting