24940
Вопросы с собеседований по Python @workakkk - админ @machinelearning_interview - вопросы с собесдований по Ml @pro_python_code - Python @data_analysis_ml - анализ данных на Python @itchannels_telegram - 🔥 главное в ит РКН: clck.ru/3FmrFd
🐍 Python-задача с подвохом: что напечатает код?
def extend_list(val, lst=[]):
lst.append(val)
return lst
list1 = extend_list(10)
list2 = extend_list(123, [])
list3 = extend_list('a')
print("list1 =", list1)
print("list2 =", list2)
print("list3 =", list3)
list1 = [10], list2 = [123], list3 = ['a'] list1 = [10], list2 = [123], list3 = [10, 'a'] list1 = [10, 'a'], list2 = [123], list3 = [10, 'a'] list1 = [10, 'a'], list2 = [123], list3 = ['a']list1 = [10, 'a'] list2 = [123] list3 = [10, 'a']lst=[] создаётся один раз — при определении функции. extend_list(10), значение 10 добавляется в этот общий список. extend_list(123, []), передаём новый список, всё ок. extend_list('a'), снова используется общий список из первого вызова.
def extend_list(val, lst=None):
if lst is None:
lst = []
lst.append(val)
return lst
🖥 Хитрый способ изменить поведение цикла for — без изменения самого цикла
Можно ли сделать так, чтобы весь Python-код, использующий for x in ..., внезапно начал вести себя иначе — без изменения самого цикла?
Ответ: да, если переопределить поведение итератора. На экране показа — трюк, где обычный список «врет» в цикле и выдает неожиданные значения.
Трюк можно использовать и с dict, set и кастомными генераторами. Особенно удобно в юнит-тестах или визуализациях.
class FakeList(list):
def __iter__(self):
return iter(["test", "mock", "override"])
data = FakeList([1, 2, 3])
for x in data:
print(x) # выведет: test, mock, override
Python — это фундамент, на котором можно построить карьеру в аналитике данных.
Современные компании все чаще ищут специалистов, способных не просто писать код, но и извлекать из данных полезные для бизнеса инсайты. И если вы уже владеете Python, у вас есть серьезная фора перед другими кандидатами.
3 июля в 19:00 (мск) Анастасия Зеленова, team lead аналитики в Raiffeisen CIB, расскажет, кто такие аналитики и какие навыки и инструменты необходимы для работы, а также покажет повседневные задачи аналитика на реальных примерах.
Присоединяйтесь к бесплатному онлайн-вебинару: https://clc.to/erid_2W5zFHErDXE
Реклама. ООО "КАРПОВ КУРСЫ". ИНН 7811764627. erid: 2W5zFHErDXE
🖥 Как написать худший возможный Python-код
Иногда проще показать, как не надо, чем объяснять, как надо.
Вот список «правил», которые помогут вам гарантированно испортить любой Python-проект.
1. 🔒 Используйте непонятные имена переменных
Называйте переменные x, y, a, thing. Абстракция — залог путаницы.
def f(x, y, z=None):
a = x * 2
b = y + a if z else y - a
c = [i for i in range(a) if i % 2]
return sum(c) + b
result = [x if x > 0 else (y if y < 0 else z) for x in data if x or y and not z]
eval("d['" + key + "']")
value = "42"
value = int(value)
value = [value] * value
counter = 0
def increment():
global counter
counter += 1
if user.role == "xyz" and user.level > 42:
access_granted()
def foo():print("start")
if True:
print("yes")
else:
print("no")
def complex_logic(x):
return (lambda y: (lambda z: z**2)(y + 1))(x)
class HandlerFactory:
def get_handler(self):
class Handler:
def handle(self, x): return x
return Handler()
def legacy_feature():
print("This feature is deprecated")
return
# нигде не вызывается
def a(x): return x+1
# Просто запускай и смотри глазами
process_user(data)
🐍 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) занимает минуты @lru_cache — это одна строка, которая превращает тяжёлую функцию в реактивную. Идеально для оптимизации без изменения логики.
Читать полностью…
🐍 Задача для собеседования на Python
— Условие:
def mystery(x, y):
if x == 0:
return y
else:
return mystery(x - 1, x + y)
result = mystery(3, 2)
print(result)
5 811Ошибка рекурсииmystery — это рекурсивная функция, которая накапливает сумму чисел от x до 1, прибавляя y в конце.
🐳 Что если вам нужно запустить чужой (возможно небезопасный) код?
Представьте: вам прислали бинарник, 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
/proc, /sys
Задача: Что делает эта странная функция teleport и почему она запускает цикл 32 раза?
🧠 Подсказка:
На первый взгляд это выглядит как хаотичная мешанина побитовых операций, но на самом деле здесь происходит реверс битов (bitwise reversal) — отражение битов справа налево.
Но вопрос — зачем делать это 32 раза подряд?
🔍 Что происходит:
Каждый шаг в теле цикла — это стандартная техника реверса битов через маски и сдвиги:
0xAAAAAAAA, 0xCCCCCCCC, и т.д. — маски по битовым паттернам
Итерация for _ in range(32) делает это снова и снова…
💣 Фишка: первый проход уже полностью отражает 32-битное число.
Остальные 31 повтор возвращают число в исходное состояние — но в побитово инвертированном порядке!
📌 То есть:
Чётное количество циклов — возвращает в исходную позицию
Нечётное — делает реверс
👉 Ответ на teleport(0x12345678) будет реверс битов этого числа.
Ожидаемое: 0x1e6a2c48 (в зависимости от реализации может отличаться).
🎯 Челлендж для продвинутых:
Упростите функцию до одного вызова (без цикла)
Напишите inverse_teleport(x), которая возвращает исходное число обратно
🧩 Эта техника используется в:
— алгоритмах FFT (быстрые преобразования Фурье)
— графике
— реверсировании хэшей
— low-level оптимизациях для SIMD
✔️ 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
🐍 **LibrePythonista — Python прямо в LibreOffice Calc**
LibrePythonista — это бесплатное и открытое расширение, которое добавляет полноценную поддержку Python прямо в LibreOffice Calc. И да, оно уже поддерживает Pandas, Matplotlib и даже собственный PIP-менеджер пакетов!
💡 Что умеет LibrePythonista:
• 📊 Создание DataFrame, Series и графиков прямо в ячейках
• 📦 Встроенный PIP для установки дополнительных библиотек
• 🔐 Локальное исполнение кода — ваши данные не покидают компьютер
• 🧰 Использует OOO Dev Tools — не требует дополнительных расширений
• 🧪 Пока в бете — можно влиять на развитие
📎 Больше не нужно колхозить скрипты или вручную подключать Pandas/Numpy — всё уже встроено.
🔗 Проект: https://extensions.libreoffice.org/en/extensions/show/99231
🐍 lessslow.py — Python, который не тормозит
Многие считают Python медленным, но это не всегда правда.
Ash Vardanyan в рамках проекта Less Slow показывает, как писать быстрый и эффективный код даже на Python — без магии, но с пониманием.
⚡️ Что в проекте:
- pandas vs polars — что быстрее при работе с миллионами строк
- Использование Numba, Cython, PyO3, rust bindings
- Работа с нативными типами, векторизация и zero-copy
- Сериализация: MessagePack, Arrow, Parquet
- Ускорение JSON: orjson, yyjson, simdjson, ujson
- Как обойти GIL и не платить за удобство интерпретатора
📚 Репозиторий: github.com/ashvardanian/lessslow.py
💡 Даже если ты не используешь всё это каждый день — ты точно станешь писать лучший Python-код.
@python_job_interview
🐍 Хитрая задача на замыкания в Python
🔹 Уровень: Advanced
🔹 Темы: замыкания (closures), переменные цикла, lambda, отложенное выполнение
📌 Условие
Что выведет следующий код?
funcs = []
for i in range(5):
funcs.append(lambda: i)
results = [f() for f in funcs]
print(results)
[0, 1, 2, 3, 4]? lambda внутри цикла? [0, 1, 2, 3, 4]?
[4, 4, 4, 4, 4]
lambda внутри funcs замыкают одну и ту же переменную `i`. f() переменная i уже равна 4 — и так для всех функций.lambda: i не захватывает значение, а ссылается на переменную, которая будет изменяться при каждой итерации цикла. lambda ссылаются на одно и то же `i`, которое стало равно 4 к концу цикла.i, передав его как аргумент по умолчанию в lambda:
for i in range(5):
funcs.append(lambda i=i: i)
[0, 1, 2, 3, 4]
🐍 Задача с подвохом: mutable default arguments в Python
🔹 Уровень: Advanced
🔹 Темы: изменяемые аргументы по умолчанию, функции, ловушки с list и dict
📌 Условие
Что выведет следующий код?
def append_to_list(value, my_list=[]):
my_list.append(value)
return my_list
print(append_to_list(1))
print(append_to_list(2))
print(append_to_list(3))
[1]
[1, 2]
[1, 2, 3]
my_list=[] создаётся один раз и затем используется повторно при всех вызовах.append_to_list изменяют один и тот же список.my_list должен быть новым на каждый вызов, но это не так.None и создавай новый объект вручную:
def append_to_list(value, my_list=None):
if my_list is None:
my_list = []
my_list.append(value)
return my_list
[1]
[2]
[3]
[], {}, set() и кастомные классы.
🌟 FastAPI-Limiter — простое ограничение запросов для FastAPI. Эта библиотека добавляет rate limiting буквально в несколько строк кода, используя Redis как хранилище для счетчиков.
Достаточно добавить Depends(RateLimiter(times=2, seconds=5)) к эндпоинту и он начнет отклонять запросы после двух обращений в пятисекундном окне. Под капотом работает Lua-скрипт, который эффективно считает запросы без лагов.
Интересные фишки:
— Поддержка вебсокетов через WebSocketRateLimiter
— Кастомизация идентификаторов
— Множественные лимиты на один роут
🤖 GitHub
@python_job_interview
🐍 Задача на внимательность и глубокое понимание Python: ловушка `defaultdict` и мутабельных объектов
Представьте, что вы разрабатываете систему трекинга активностей пользователей на сайте. Вам нужно собрать словарь, где каждому пользователю соответствует список его действий.
Вы решаете использовать collections.defaultdict(list) для удобства, и пишете такой код:
from collections import defaultdict
actions = defaultdict(list)
def track(user_id, action):
actions[user_id].append(action)
track('alice', 'login')
track('bob', 'view')
track('alice', 'logout')
# Теперь вы хотите скопировать этот словарь
copy_actions = actions.copy()
# Допишем в оригинал
track('bob', 'logout')
# Посмотрим, как выглядит копия
print(copy_actions['bob']) # Что будет напечатано?
import copy
copy_actions = copy.deepcopy(actions)
📥 Palanteer — инструмент для глубокого анализа производительности C++ и Python-приложений. Этот проект предлагает детальную телеметрию: от временных меток выполнения функций до отслеживания потребления памяти и переключений контекста.
Инструмент обладает минималистичной интеграцией: в C++ достаточно подключить один заголовочный файл, а Python-код анализируется автоматически. Визуализация в реальном времени включает временные графики, flame graphs и логи с наносекундным разрешением.
🤖 GitHub
🔦 VulnHuntr — ИИ-детектор уязвимостей в Python-коде. Этот инструмент от ProtectAI использует LLM для поиска сложных цепочек уязвимостей, которые традиционные статические анализаторы часто пропускают.
Инструмент анализирует полный путь от пользовательского ввода до опасных операций, выявляя даже многошаговые эксплойты вроде RCE или SSRF. Работает через поэтапный анализ: сначала LLM изучает README, затем исследует код с наращиванием контекста, и наконец формирует отчёт с PoC-эксплойтом и оценкой уверенности.
🤖 GitHub
@python_job_interview
🔍 SQLAlchemy-Filters — удобный инструмент для динамической фильтрации, сортировки и пагинации SQLAlchemy-запросов. Этот проект особенно полезен при разработке REST API, где клиенту нужно гибко управлять выборкой данных.
Библиотека поддерживает сложные условия фильтрации, автоматические джойны связанных моделей и работу с гибридными свойствами. Фильтры задаются простыми словарями, что упрощает интеграцию с фронтендом.
🤖 GitHub
@python_job_interview
🖥 Теперь официально Google выпустили Gemini CLI - AI-агента для работы прямо в терминале
• Лёгкий и мощный инструмент для разработки в командной строке
• Работает на базе Gemini 2.5 Pro
• Код агента в открытом доступе (Apache 2.0)
• Поддержка контекста в 1 миллион токенов
• Бесплатный тариф: до 60 запросов в минуту и 1000 в день
• Привязка к Google Search
• Поддержка плагинов и скриптов
• Интеграция с VS Code (Gemini Code Assist)
Запуск в cli: npx https://github.com/google-gemini/gemini-cli
🔜 Анонс: https://blog.google/technology/developers/introducing-gemini-cli-open-source-ai-agent/
🔜 Github: https://github.com/google-gemini/gemini-cli/
@ai_machinelearning_big_data
#AI #ML #agent #Google
🧐ИИ — помощник или угроза тестировщикам?
В одних компаниях требуют использовать 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 код ? #junior #python
Задача для новичков. s = set()
a = [1, 2, 3]
s.add(tuple(a))
print(s)
Списки изменяемы и не могут быть элементами множества, но кортежи — неизменяемы и хэшируемы, поэтому кортеж из списка успешно добавится во множество.
🎓 Модульный учебник по Python для Middle-разработчиков
Этот учебник создан для тех, кто уже пишет на Python, но хочет выйти за рамки базовых конструкций. Здесь — практичные модули с упором на архитектуру, производительность, тестирование, чистый код и современные практики разработки.
🔧 Каждый модуль — это отдельный блок знаний: теория + реальные кейсы + трюки из индустрии.
🎯 Только то, что реально нужно миддлу: от дебага и профилирования до async, typing, CI/CD и LLM-интеграций.
Без воды. С кодом. По делу.
📚 Читать
@python_job_interview
🐍 Задача на внимательность и понимание области видимости в 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".results остаётся пустым? results.append(...)? append() просто написать results = [...] внутри функции? 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()) — покажет глобальныеglobal, но присваивание новой переменной требует явного global. Это тонкое поведение, которое часто приводит к ошибкам, особенно при работе со списками и словарями.
Читать полностью…
🐍 Python-задача с подвохом: кто съел яблоко?
У тебя есть список действий персонажей:
actions = [
("Alice", "picked"),
("Bob", "looked"),
("Charlie", "picked"),
("Bob", "dropped"),
("Alice", "dropped"),
("Charlie", "ate")
]
(имя персонажа, действие).who_ate(actions: list[tuple[str, str]]) -> str, которая возвращает:"OK" — если всё законно "CHEATER" — если съевший не имел права
Стань частью масштабного ИТ-события от МТС
True Tech Day 2025 — третья технологическая конференция МТС для профессионалов ИТ‑индустрии. Одна из главных тем в этом году — тренды и практики искусственного интеллекта.
В программе:
— Доклады от ученых и зарубежных спикеров с индексом Хирша более 50.
— Кейсы применения современных ИИ‑решений — от AI‑агентов, тестов LLM и бенчмарков до вопросов регулирования.
— AI-интерактивы и технологические квесты.
— Пространство для нетворкинга,
…а еще after-party со звездным лайн-апом.
Когда: 6 июня
Где: Москва, МТС Live Холл и онлайн
Участие бесплатное, но мест мало. Регистрируйся по ссылке.
⚡️ Pydantic Core — Rust-ядро для валидации данных в Python. Этот низкоуровневый валидатор демонстрирует впечатляющую скорость: до 17x быстрее оригинальной реализации на чистом Python.
Хотя напрямую с ним обычно не работают (используя вместо этого основной пакет pydantic), проект интересен как пример интеграции Rust в Python-экосистему. Валидация описывается через JSON-схемы, поддерживая сложные условия вроде ge: 18 для чисел или вложенных структур. Сборка требует Rust toolchain, но результат стоит того: например, валидация списка из 10к элементов занимает миллисекунды.
🤖 GitHub
@python_interview
🔍Тестовое собеседование на Middle Python-разработчика в четверг
22 мая(в четверг) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Python-разработчика.
Собес проведет Вадим Пуштаев, ex. head of backend в 💙, автор канала @pythonetc, архитектор в европейской компании
Как это будет:
📂 Вадим будет задавать реальные вопросы и задачи разработчику-добровольцу
📂 Вадим будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью
📂 В конце можно будет задать любой вопрос Вадиму
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Python-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_py_bot
Реклама. ООО "ШОРТКАТ", ИНН: 9731139396, erid: 2Vtzqvtihsa
🚀 VS Code трансформируется в опенсорнсый ИИ-редактор!
Команда Visual Studio Code объявила о планах трансформировать VS Code в редактор с открытым исходным кодом для работы с ИИ.
Конкуренция - двигатели прогресса! Где-то напряглась команда Cursor 🤓
🔗 Подробности: aka.ms/open-source-ai-editor
#VSCode #OpenSource #ИИ #Разработка #Сообщество
🐍 Хитрая задача на Python: замыкание + nonlocal
📌 Задача:
Напиши функцию counter(start), которая возвращает функцию-счётчик. Каждый вызов этой функции увеличивает значение на 1.
Пример:
c = counter(10)
print(c()) # 11
print(c()) # 12
print(c()) # 13
d = counter(100)
print(d()) # 101
print(c()) # 14 ← работает независимо
nonlocal — не заработает
def counter(start):
count = start
def inner():
nonlocal count
count += 1
return count
return inner
# Проверка
a = counter(5)
print(a()) # 6
print(a()) # 7
b = counter(100)
print(b()) # 101
print(a()) # 8
counter возвращает функцию, внутри которой count сохраняется в замыканииnonlocal нужен, чтобы изменить внешнюю переменную, а не просто читать еёnonlocal count, Python создаст локальную count внутри inner(), и UnboundLocalError — гарантирован
🔍Тестовое собеседование на Middle Python-разработчика в четверг
15 мая(в четверг) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Python-разработчика.
Как это будет:
📂 Даня, старший разработчик в Авито, будет задавать реальные вопросы и задачи разработчику-добровольцу
📂 Даня будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью
📂 В конце можно будет задать любой вопрос Дане
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_py_bot
Реклама. ООО "ШОРТКАТ", ИНН: 9731139396, erid: 2VtzqxCZjDW