uk
Feedback

Не попадись на ботовода! Telemetrio знаходить і позначає такі канали мітками 👉 Хочеш бачити мітку, оформляй підписку

Python задачи и вопросы

Python задачи и вопросы

Відкрити в Telegram

Задачи и вопросы с собеседований по python разного уровня сложности По рекламе: @cyberJohnny

Показати більше
1 111
Підписники
-124 години
-37 днів
-1130 днів
Архів дописів
❓ Сколько ключей создадут True, 1 и 1.0? Python 3.13. Что выведет код? values = {} values[True] = "first" values[1] = "second" values[1.0] = "third" print(len(values), values[True]) 👾 — 3 first 👍 — 1 third 🥰 — 2 third ⚡️ — TypeError Ответ: 👍 — 1 third. Значения True, 1 и 1.0 равны при сравнении и имеют одинаковый хеш. Для словаря это один ключ. Каждая следующая запись заменяет значение предыдущей. Документация: ключи словаря (#mapping-types-dict) ➡️ Навигация: База знаний (https://t.me/pyproglib) • Задачи • Собеседования (https://t.me/py_interview_lib) • Вакансии (https://t.me/pydevjob) 🐸 Библиотека программиста (https://t.me/proglibrary) https://docs.python.org/3.13/library/stdtypes.html

❓ В каком порядке окажутся записи с одинаковым ключом сортировки? Python 3.13. Что выведет код? players = [ ("Zoe", 10), ("Ann", 5), ("Bob", 10), ] ordered = sorted(players, key=lambda p: p[1]) print(" ".join(name for name, score in ordered)) 👾 — Ann Zoe Bob 👍 — Ann Bob Zoe 🥰 — Zoe Bob Ann ⚡️ — Zoe Ann Bob Ответ: 👾 — Ann Zoe Bob. sorted сортирует только по ключу p[1], то есть по баллам. Сортировка стабильна: при равных ключах сохраняется исходный порядок записей. Поэтому после Ann с 5 баллами идут Zoe и Bob с 10 баллами именно в таком порядке. По именам дополнительная сортировка не выполняется. Правило в документации Python (#sort-stability-and-complex-sorts) 🐸 Библиотека задач по Python https://docs.python.org/3.13/howto/sorting.html

❓ Может ли finally изменить возвращаемый список? Python 3.13. Что выведет код? def build(): result = [1] try: return result finally: result.append(2) print(build()) 👾 — [1] 👍 — None 🥰 — [1, 2] ⚡️ — Ошибка: после return код не выполняется Ответ: 🥰 — [1, 2]. return выбирает объект, который нужно вернуть, но до фактического выхода из функции выполняется finally. Он изменяет тот же список, поэтому вызывающий код получает [1, 2]. Нового списка здесь не создаётся, и значение return не заменяется. Правило в документации Python (#finally-clause) 🐸 Библиотека задач по Python https://docs.python.org/3.13/reference/compound_stmts.html

❓ Сработает ли match, если в словаре есть лишние ключи? Python 3.13. Что выведет код? payload = {"kind": "ping", "debug": True} match payload: case {"kind": kind}: print(kind) case _: print("no match") 👾 — no match 👍 — ping 🥰 — Ошибка из-за ключа debug ⚡️ — Ошибка: kind должен быть объявлен заранее Ответ: 👍 — ping. Шаблон словаря требует наличия указанных ключей, но не запрещает дополнительные. Ключ kind найден, а его значение связывается с переменной kind. Ключ debug совпадению не мешает. Чтобы собрать остальные пары, можно добавить в шаблон захват остатка словаря. Правило в документации Python (#mapping-patterns) 🐸 Библиотека задач по Python https://docs.python.org/3.13/reference/compound_stmts.html

❓ Когда генератор выбирает источник, а когда проверяет условие? Python 3.13. Что выведет код? source = [1, 2, 3] limit = 1 selected = (x for x in source if x > limit) source = [9] limit = 2 print(list(selected)) 👾 — [2, 3] 👍 — [9] 🥰 — [] ⚡️ — [3] Ответ: ⚡️ — [3]. Для самого левого for генераторного выражения источник и его итератор выбираются при создании генератора. Поэтому переназначение source не переключает selected на список [9]. Условие x > limit проверяется во время обхода, когда limit уже равен 2. Из исходного списка проходит только 3. Правило в документации Python (#generator-expressions) 🐸 Библиотека задач по Python https://docs.python.org/3.13/reference/expressions.html

❓ Создаст ли defaultdict новый ключ при вызове get? Python 3.13. Что выведет код? from collections import defaultdict groups = defaultdict(list) print(groups.get("new"), len(groups)) groups["new"].append(1) print(groups["new"], len(groups)) 👾 — None 0, затем [1] 1 👍 — [] 1, затем [1] 1 🥰 — None 1, затем [1] 1 ⚡️ — KeyError Ответ: 👾 — None 0, затем [1] 1. get работает как у обычного dict: без указанного значения по умолчанию возвращает None и ничего не вставляет. Фабрика list вызывается при обращении к отсутствующему ключу через квадратные скобки. Тогда создаётся список, в который append добавляет 1. Правило в документации Python (#collections.defaultdict) 🐸 Библиотека задач по Python https://docs.python.org/3.13/library/collections.html

❓ Изменится ли список внутри кортежа, если += завершится ошибкой? Python 3.13. Что выведет код? items = ([1],) try: items[0] += [2] except TypeError: print("TypeError") print(items) 👾 — TypeError, затем ([1],) 👍 — ([1, 2],), без ошибки 🥰 — TypeError, затем ([1, 2],) ⚡️ — TypeError, затем пустой кортеж Ответ: 🥰 — TypeError, затем ([1, 2],). Сначала += изменяет сам список, добавляя 2. Затем Python пытается записать результат обратно в items[0]. Кортеж не поддерживает такое присваивание, поэтому возникает TypeError. Уже выполненное изменение списка не откатывается. Правило в документации Python (#why-does-a-tuple-i-contain-a-value-after-i-tuple-i-fails) 🐸 Библиотека задач по Python https://docs.python.org/3.13/faq/programming.html

Два tee-итератора: сколько раз вызван исходный генератор? Сколько строк, начинающихся с source, выведет код на карточке? 👾 О
Два tee-итератора: сколько раз вызван исходный генератор? Сколько строк, начинающихся с source, выведет код на карточке? 👾 Одну 👍 Две 🥰 Три ⚡️ Вместо вывода будет RuntimeError Ответ: Две: source 0 и source 1. Итератор a уже получил оба значения, а первый next(b) берёт ноль из сохранённых данных, не вызывая генератор снова. tee может удерживать значительный буфер, если один потребитель сильно опережает другой. Ленивость не гарантирует постоянный расход памяти. Возвращённые одной tee итераторы также не потокобезопасны. Как работает itertools.tee (https://docs.python.org/3/library/itertools.html#itertools.tee)

👀 Как вы смотрите видео? Разбираете урок, слушаете интервью фоном или начинаете на телефоне, а продолжаете на большом экране? Хотим узнать, что делает просмотр удобным для вас. Вспомните последнее видео — ролик, урок, фильм или серию сериала — и расскажите о своём опыте. Если детали не запомнились, можно так и ответить. 🕰️ Опрос займёт около 3 минут. В результатах сможете сравнить свои привычки с ответами других участников. А разработчики и инженеры видеоплатформы расскажут, что происходит по ту сторону экрана, пока вы смотрите видео. 🔗 Поделиться опытом (https://anketolog.ru/service/survey/fill/direct/1064183/tgoTQDW0?utm_source=socialmedia) 🐸 Библиотека программиста (https://t.me/+CBVsd5bLBFtiNWQy)

zip(strict=True): ошибка до первого результата или после? Что напечатает код на карточке? Параметр strict доступен с Python 3
zip(strict=True): ошибка до первого результата или после? Что напечатает код на карточке? Параметр strict доступен с Python 3.10. 👾 Только ValueError 👍 Сначала (1, 10), затем ValueError 🥰 Две пары, вторая с None ⚡️ Ничего Ответ: Сначала (1, 10), затем ValueError. zip ленивый: первая пара уже выдана, когда на втором next обнаруживается разная длина. strict не делает обработку транзакцией и не откатывает побочные эффекты, которые вы выполнили для предыдущих пар. Если нужна проверка до обработки, продумайте её отдельно с учётом природы входных итераторов. Контракт zip (https://docs.python.org/3/library/functions.html#zip)

Как в FastAPI (SQLAlchemy 2.0 async) корректно обеспечить «сеанс на запрос» с авто-rollback при исключении и гарантированным закрытием соединения? 👾 — Создать один глобальный AsyncSession и шарить его между хэндлерами 👍 — Использовать зависимость с yield 🥰 — Открывать/закрывать сессию вручную в каждом хэндлере try/except ⚡️ — Класть сессию в app.state на старте приложения и переиспользовать Библиотека задач по Python

😭 Как не потратить недельный лимит AI-кодинга за три дня? Разберём на вебинаре, как тратить меньше на AI-агентов — без потери качества кода. 🔘 Поговорим о том: — когда дорогая модель действительно нужна, а когда хватит дешёвой; — сколько стоит один прогон и куда уходят токены; — какие задачи можно отдавать субагентам; — как настроить маршрутизацию моделей; — что проверять в AI-коде перед merge. ✏️ Покажем всё на конкретных цифрах и вживую: сравним расходы до и после. ⬇️ 18 сентября, 19:00 МСК ⬇️ 1,5 часа · бесплатно ⬇️ Арсений Харланов и Олег Лайок 💬 Пишите в комментариях, где упираетесь в лимиты и на что уходят деньги. Самые залайканные вопросы разберём на вебинаре. 🔗 Зарегистрироваться на вебинар⁠ (https://clc.to/lp0GfQ)

Неверный отчёт или неработающий конвейер данных не всегда становится следствием технической ошибки. Иногда проблема возникает
Неверный отчёт или неработающий конвейер данных не всегда становится следствием технической ошибки. Иногда проблема возникает раньше — когда команда неправильно поняла задачу бизнеса, не уточнила ограничения или пропустила скрытые требования. 15 сентября в 20:00 на открытом уроке курса «Аналитик DWH» разберёте, как собирать требования к аналитическим системам и превращать бизнес-задачи в понятную архитектуру данных. На реальных примерах вы увидите, какие ошибки приводят к неработающим конвейерам и отчётам с неверными показателями. Поймёте, почему работа DWH-аналитика не ограничивается SQL и выбором инструментов, а начинается с точных вопросов и системного понимания задачи. Во время практического упражнения вы попробуете сформулировать вопросы к представителям бизнеса, выявить скрытые требования и определить, какие сведения необходимо получить до проектирования системы. После урока у вас останется памятка по сбору требований, которую можно использовать перед разработкой нового хранилища, отчёта или конвейера данных. 👉 Записаться: https://vk.cc/d1iHvu Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Один медленный SQL-запрос может задерживать обновление отчётов, увеличивать нагрузку на инфраструктуру и замедлять работу все
Один медленный SQL-запрос может задерживать обновление отчётов, увеличивать нагрузку на инфраструктуру и замедлять работу всей аналитической системы. При этом причина не всегда находится в самом запросе — проблема может быть в индексах, схеме данных, настройках СУБД или ресурсах сервера. 3 сентября в 20:00 на открытом уроке курса «Аналитик DWH» разберёте, как системно исследовать производительность баз данных и находить узкие места. Вы узнаете, какие показатели помогают оценить состояние СУБД и как отличить нормальную нагрузку от проблемы. Рассмотрите основные причины замедления на разных уровнях — от неэффективного SQL и структуры таблиц до конфигурации базы данных и аппаратного обеспечения. На практических примерах разберёте, как переписывать проблемные запросы, проектировать и настраивать индексы, а также выбирать инструменты для наблюдения и исследования производительности. После урока вы сможете точнее определять причины замедления и выбирать способ оптимизации, который соответствует реальной проблеме. 👉 Зарегистрируйтесь https://vk.cc/d0NMst Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Сервис создаёт миллионы однотипных небольших объектов (несколько фиксированных полей). Память растёт, GC давит. Что изменить в моделях, чтобы существенно снизить footprint и ускорить доступ к атрибутам? 👾 — Отключить GC через gc.disable() 👍 — Хранить данные в dict вместо объектов 🥰 — Использовать slots или @dataclass(slots=True) для моделей ⚡️ — Увеличить sys.setrecursionlimit() Библиотека задач по Python

Покупать новый курс каждый раз, когда меняется рабочая задача, — довольно странная механика. Нашли альтернативу 👇

Какое утверждение о системе зависимостей FastAPI корректно при использовании Depends, BackgroundTasks и ContextVar в асинхронном контексте? 👾 — Все зависимости в FastAPI создаются один раз при запуске приложения и переиспользуются между запросами, если они объявлены через Depends 👍 — Использование ContextVar внутри зависимости гарантирует корректное изолированное состояние на каждый HTTP-запрос, даже при высокой степени параллелизма 🥰 — BackgroundTasks могут быть объявлены внутри зависимости, но они не будут выполнены, если не проброшены явно в APIRouter ⚡️ — Асинхронные зависимости с yield (context managers) поддерживаются FastAPI только при использовании Python 3.12 и выше Библиотека задач по Python

Разработчику нужен стабильный результат, DevOps — контроль инфраструктуры, техлиду — правила для всей команды. Собрали это в одном посте 👇

Uvicorn/FastAPI-сервис использует asyncio и сторонние библиотеки, под капотом создающие потоки. Для CPU-bound задач вы подключили multiprocessing, но периодически ловите подвисания/краши при старте воркеров. Какой способ старта процессов корректнее выбрать? 👾 — fork — самый быстрый, поэтому всегда лучший выбор на Linux 👍 — spawn — запуск чистого интерпретатора, безопасен при наличии потоков/мьютексов у родителя 🥰 — forkserver — ничего не меняет относительно потоков, просто сложнее ⚡️ — Любой — способы эквивалентны на Linux Библиотека задач по Python

Когда название файла уже само по себе считается техническим долгом 😧