Python вопросы с собеседований
24.8K subscribers
699 photos
92 videos
17 files
575 links
Вопросы с собеседований по Python

@workakkk - админ

@machinelearning_interview - вопросы с собесдований по Ml

@pro_python_code - Python

@data_analysis_ml - анализ данных на Python

@itchannels_telegram - 🔥 главное в ит

РКН: clck.ru/3FmrFd
Download Telegram
🖥 Редкий Python-трюк: `contextvars` вместо глобальных переменных в async-коде

Хочешь, чтобы request_id, user_id или trace_id были доступны в любом месте кода, но без прокидывания через 20 функций?

Не делай так:


current_user = None


В async-приложении это ловушка. Один запрос может перезаписать данные другого.

Правильнее использовать contextvars:


from contextvars import ContextVar

request_id = ContextVar("request_id", default="-")

async def handler(req):
token = request_id.set(req.headers["X-Request-ID"])
try:
await process_order()
finally:
request_id.reset(token)

async def process_order():
print("trace:", request_id.get())


Почему это круто:

1. значение живёт внутри текущего async-контекста
2. параллельные запросы не смешиваются
3. не нужно таскать request_id по всем функциям
4. идеально для логов, tracing, middleware и background tasks

Особенно полезно в FastAPI, aiohttp, Celery-like воркерах и сервисах с большим количеством async-задач.

threading.local() был норм для потоков.

contextvars - нормальный инструмент для современного async Python.
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍3🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
Основы Git и GitHub за 30 секунд: настройка, коммиты, ветки, Pull Request

GitHub пугает новичков не сложностью, а количеством команд, в которых легко утонуть в первый же день. Эта шпаргалка собирает весь базовый путь от пустого терминала до открытого Pull Request, чтобы не держать всё в голове и не гуглить каждый шаг.
Сначала первая настройка: задаёшь имя и email, иначе коммиты уходят непонятно от кого. Дальше старт работы: клонируешь репозиторий, заходишь в папку и сразу создаёшь свою ветку под задачу. Потом ежедневный цикл, который повторяется каждый день: status, pull, add, commit, push. Проверил, обновил, добавил, закоммитил, отправил. Отдельно блок полезных команд на каждый день: log с графом, diff, stash, branch и переключение на main.
3👍3🔥1
tracesage добавляет локальный tracing без инфраструктуры для LangChain/LangGraph-агентов всего в две строки.

Он записывает каждый chain, tool call и LLM call в SQLite, а затем показывает запуск в браузере как live graph и timeline.

Open source, установка через pip install, лицензия MIT.

https://github.com/kjgpta/tracesage
4👍2
🖥 Python-трюк: `iter()` умеет работать как цикл до стоп-сигнала

Многие знают iter() только для списков, но у него есть второй режим:


iter(callable, sentinel)


Он вызывает функцию снова и снова, пока она не вернёт sentinel.

Например, читать большой файл кусками без while True:


with open("video.mp4", "rb") as f:
for chunk in iter(lambda: f.read(8192), b""):
process(chunk)


Что происходит:

lambda читает по 8192 байта
• когда файл закончится, read() вернёт b""
• цикл сам остановится

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


while True:
chunk = f.read(8192)
if not chunk:
break


Редкая штука, которую приятно знать.
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍5🔥4
This media is not supported in your browser
VIEW IN TELEGRAM
Шаринган разработчика: увидь, где код жрёт время, и бей туда

Оптимизация на языке Итачи. Не улучшай всё подряд, сначала увидь настоящий bottleneck. Включаешь профилировщик cProfile, собираешь статистику, сортируешь по cumtime и бьёшь в самую дорогую функцию. build_report на 78% времени это не догадка, а факт из профиля. Меньше слепых правок, больше точных ударов.

https://www.youtube.com/shorts/11O1Sadtcwc
🥴63👍2🔥1
Что выведет этот код?


funcs = []

for i in range(3):
funcs.append(lambda: i)

print([f() for f in funcs])


Многие думают:


[0, 1, 2]


Но Python выведет:


[2, 2, 2]


Почему?

`lambda` не запоминает значение `i` в момент создания.

Она запоминает саму переменную.

Когда цикл закончился, `i` уже равно `2`.

Поэтому все функции смотрят на одно и то же последнее значение.

Правильный фикс:

```python
funcs = []

for i in range(3):
funcs.append(lambda i=i: i)

print([f() for f in funcs])
```

Теперь будет:

```python
[0, 1, 2]
```

Хитрость простая:
если создаёшь функцию в цикле — фиксируй значение через аргумент по умолчанию.
👍102🔥1
Почему Python — основной язык в offensive security?

Большинство задач в ИБ так или иначе упирается в скрипты: автоматизация, работа с сетью, парсинг, фаззинг, свои утилиты под конкретную инфраструктуру. Готовых инструментов часто недостаточно — нужен код, который можно написать и доработать под себя.

Python для Пентестера от Codeby — курс для тех, кто уже знает Python на базовом уровне и хочет применять его в информационной безопасности.

Что будет на курсе:
⏺️ООП и модули для работы с аргументами командной строки
⏺️работа с БД и файловой системой
⏺️многопоточность
⏺️сетевая работа на Python
⏺️фаззер, сканер портов, брутфорсер, парсер
⏺️криптография и работа с метаданными
⏺️разработка прикладного фреймворка

Формат обучения:
3,5 месяца / 112 ак. ч. (14 недель + 1 неделя на экзамен)
• ДЗ с ручной проверкой куратором
• итоговый дипломный проект на выбор

Запись на ближайший поток открыта до 16 июля. При оплате курса сразу — скидка 30%

➡️Успейте записаться

🪧Бесплатная консультация: @CodebyAcademyBot
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1
Что выведет код?


t = ([],)

try:
t[0] += [1]
except TypeError as e:
print("Ошибка:", type(e).__name__)

print(t)


Многие думают:


Ошибка: TypeError
([],)


Но Python выведет:


Ошибка: TypeError
([1],)


Почему?

`t` — tuple, его нельзя менять.

Но внутри tuple лежит список, а список менять можно.

Оператор `+=` сначала мутирует список:

```python
[] -> [1]
```

А потом Python пытается записать результат обратно в tuple:

```python
t[0] = ...
```

И вот тут падает `TypeError`.

Итог странный: ошибка была, но данные уже изменились.

Главный урок:

immutable-контейнер не делает вложенные объекты immutable.

Если внутри tuple лежит list, этот list всё ещё можно изменить.
👍11
В regex 1.13 появился макрос regex!.

Важно: это не compile-time regex.

Он не компилирует регулярку на этапе сборки.

Смысл другой: макрос закрывает частый паттерн, когда вы используете что-то вроде std::sync::LazyLock, чтобы регулярное выражение компилировалось примерно один раз, а не при каждом вызове.

То есть вместо ручной обёртки вокруг lazy-инициализации теперь есть более удобный встроенный способ.

PR: github.com/rust-lang/regex/pull/1371
OvisOCR2 вышел на ModelScope.

Это компактная OCR-модель на 0.8B параметров для page-level document parsing: на вход подаётся изображение страницы, на выходе получается структурированный Markdown в нормальном порядке чтения.

Формулы модель отдаёт в LaTeX, таблицы в HTML, визуальные области помечает image tags с bbox-координатами.

По заявленным результатам OvisOCR2 набрала 96.58 overall на OmniDocBench v1.6 и стала первой end-to-end моделью, которая заняла первое место в лидерборде, где раньше доминировали pipeline-системы.

На PureDocBench тоже сильный результат: 75.06 Avg3. Это важнее, чем просто победа на одном бенчмарке, потому что документный парсинг давно страдает от переобучения под популярные наборы.

Модель сделана на базе Qwen3.5-0.8B и дообучалась через SFT, RL и OPD. Для деплоя есть поддержка vLLM, лицензия Apache 2.0.

https://modelscope.ai/models/ATH-MaaS/OvisOCR2
👍2🔥2😐1
Kimi K3 может стать моментом DeepSeek 2.0

Первые бенчмарки выглядят очень сильно. Kimi K3 уже называют моделью, которая сокращает разрыв между китайскими open-weight моделями и закрытыми флагманами США. FT пишет, что K3 должна превзойти Opus 4.8 в ряде бенчмарков, но при этом всё ещё не дотягивает до закрытой Fable.

Opus 4.8 вышла в конце мая, Anthropic позиционировала её как заметное обновление для agentic-задач, reasoning и работы с инструментами. Если Kimi K3 действительно обходит её в части тестов, тезис «Китай стабильно отстаёт на 6–8 месяцев» становится всё слабее.

Отдельно Kimi-K3 уже вышла на первое место в Frontend Code Arena с 1679 pts, обойдя Claude Fable 5. В frontend она стала №1 в 6 из 7 доменов: Brand & Marketing, Reference-Based Design, Data & Analytics, Consumer Product, Simulations и Content Creation Tools.

Конечно, бенчмарки ещё нужно проверять реальным использованием: coding agents, большие репозитории, 3D, интерфейсы, долгие задачи, стабильность и цена.

Китайские модели всё ближе к frontier-уровню американских закрытых.

Kimi K3 - не Fable и не Mythos. Но она уже слишком близко к топовым западным моделям, чтобы относиться к ней как к «ещё одной open model».


kimi.com/code/docs/en/kimi-code/models
👍31