Python: задачки и вопросы
Ir al canal en Telegram
Вопросы и задачки для подготовки к собеседованиям и прокачки навыков Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Другие наши проекты: https://tprg.ru/media
Mostrar más6 871
Suscriptores
-424 horas
-137 días
-5230 días
Archivo de publicaciones
Где лучшие тусовки? На тех-ивентах!
Последняя по очереди, но не по значимости — номинация «IT-ивент года». Здесь тоже собрались три компании, и если вы еще не добрались до чтения их кейсов, то давайте сделаем это вместе.
— Лаборатория Числитель собрала конференцию, на которой обсуждают строго только K8s.
— Мероприятие Selectel, которое стало уже традицией, делали полностью in-house.
— Специально для своего хакатона Островок создал платформу, чтобы участвовать могли разработчики из любой точки мира.
Выбирайте компанию-фаворита и вручайте ей золотую мышь — голосование доступно на сайте.
Repost from Представляешь,
Кейсы из номинации «Дизайн года» ждут ваших голосов
Осталась ровно неделя до конца голосования в премии Tproger. Уже дико хочется узнать, кто в лидерах! Но даже мы в команде стараемся держать интригу. И чтобы скоротать время, давайте посмотрим на дизайнерские кейсы компаний:
— AcademiaDev представила интерактивную инсталляцию, которая разлетелась по СМИ и собрала 48 млн охвата.
— ИИ-платформа Сократик рассказала, как устроена их система по генерации готовых презентаций.
— Островок поделился, как они сделали отдельную айдентику для Ostrovok! Tech.Закидайте их своими голосами: https://tprg.ru/WLvk
Развёрнутое пояснение
1️⃣Список [𝚃𝚛𝚞𝚎, 𝚙𝚛𝚒𝚗𝚝("𝚌𝚑𝚎𝚌𝚔", 𝚎𝚗𝚍=" "), 𝚃𝚛𝚞𝚎] вычисляется слева направо при создании.
2️⃣Вызов 𝚙𝚛𝚒𝚗𝚝("𝚌𝚑𝚎𝚌𝚔", 𝚎𝚗𝚍=" ") печатает check (с пробелом вместо переноса строки) и возвращает 𝙽𝚘𝚗𝚎 — все функции без явного 𝚛𝚎𝚝𝚞𝚛𝚗 возвращают 𝙽𝚘𝚗𝚎.
3️⃣Список превращается в [𝚃𝚛𝚞𝚎, 𝙽𝚘𝚗𝚎, 𝚃𝚛𝚞𝚎].
4️⃣Функция 𝚊𝚕𝚕() проверяет истинность всех элементов. Первый элемент 𝚃𝚛𝚞𝚎 — истинный, второй 𝙽𝚘𝚗𝚎 — ложный, поэтому 𝚊𝚕𝚕() сразу возвращает False.
5️⃣Переменная 𝚛𝚎𝚜𝚞𝚕𝚝 получает False, и печатается check (из 𝚙𝚛𝚒𝚗𝚝), а затем False.
Почему это важно
Встраивание функций с побочными эффектами в проверки 𝚊𝚕𝚕() или 𝚊𝚗𝚢() может давать неожиданный результат, если функция возвращает 𝙽𝚘𝚗𝚎 или другое falsy-значение.
Repost from Типичный программист
Какой кейс станет облачным продуктом года?
Давайте думать, подсказывайте голосовать! В этой номинации Tproger Awards также участвуют пять компаний. Вот статьи про их продукты:
👍ПАК виртуализации от Гравитона, который построен по гиперконвергентной архитектуре, что предусматривает простое и предсказуемое масштабирование.
👍ИИ-ассистент от Рунити, который начинался как внутренний продукт, но уже вышел на внешний рынок.
👍VPS от SmartApe, который помог онлайн-школе выдержать рост нагрузки в 5 раз.
👍Контейнерная платформа «Штурвал» от Лаборатории Числитель, благодаря которой система стала устойчива к высоким нагрузкам.
👍Облачная платформа от Selectel, которая позволяет компаниям самим управлять данными, подключать нужные сервисы в несколько кликов и иметь доступ к поддержке 24/7.Что из этого достойно золотой мыши — решать вам. Переходите на сайт голосования и выбирайте тот самый кейс 👍
Развёрнутое пояснение
1️⃣Начальные значения: 𝚊 = 𝟶, 𝚋 = 𝟷.
2️⃣Выражение 𝚊, 𝚋 = 𝚋, 𝚊 + 𝚋 сначала вычисляет правую часть как кортеж: (𝚋, 𝚊 + 𝚋) → (𝟷, 𝟶 + 𝟷) → (𝟷, 𝟷).
3️⃣Только после этого значения распаковываются: 𝚊 = 𝟷, 𝚋 = 𝟷.
4️⃣Можно ожидать, что 𝚋 = 𝟸, думая, что сначала 𝚊 станет 𝟷, а потом 𝚊 + 𝚋 = 𝟷 + 𝟷 = 𝟸. Но нет — правая часть вычисляется со старыми значениями.
Почему это важно
Это то, что делает 𝚊, 𝚋 = 𝚋, 𝚊 безопасным свопом без временной переменной. Но в более сложных выражениях, как здесь (числа Фибоначчи), легко неправильно предсказать результат, если не помнить это правило.
Repost from Типичный программист
Выбираем лучший продукт года🐀
У нас в разгаре премия Tproger — в ней мы выбираем лучшие ИТ-разработки среди 16 компаний. Сегодня ближе знакомимся с участниками номинации «Продукт года».
В ней участвуют пять компаний. Изучаем:
👍ОТП Банк представляет ASOC-сканер, который спроектировал один разработчик за месяц.
👍Гравитон делится кейсом создания ПО мониторинга без агентов, который можно затестить бесплатно.
👍NetVision борется с недобросовестными самокатчиками с помощью платформы интеллектуального мониторинга СИМ.
👍Solar показывает appScreener, который вырос из стартапа до стандарта рынка; при работе над ним сотрудники получили научные степени.
👍Reksoft рассказывает о платформе Brain ERM, который помогает компаниям экономить до 70% времени на рутинных HR-операциях.Если вы еще не проголосовали за понравившийся продукт — самое время это сделать. Переходите на сайт премии и выбирайте свой релиз года. Пусть золотая мышь достанется команде лучших 🔥
Развёрнутое пояснение
1️⃣𝚒𝚗𝚝("𝟶𝟷𝟶") вызывается без второго аргумента, значит основание — 𝟷𝟶. Строка "𝟶𝟷𝟶" парсится как десятичное число, ведущий ноль не имеет значения. Результат: 𝟷𝟶.
2️⃣Литерал 𝟶𝚘𝟷𝟶 в Python — это восьмеричная запись: 𝟷 × 𝟾 + 𝟶 = 𝟾.
3️⃣В Python 2 запись 𝟶𝟷𝟶 без буквы 𝚘 тоже была восьмеричной, что вызывало путаницу. В Python 3 это запретили: 𝟶𝟷𝟶 как литерал — это SyntaxError, нужно писать 𝟶𝚘𝟷𝟶.
4️⃣Но 𝚒𝚗𝚝("𝟶𝟷𝟶") — это парсинг строки, и тут ведущий ноль просто пропускается.
Почему это важно
При парсинге данных из файлов или API числа вроде "010" могут означать и десятичное 𝟷𝟶, и восьмеричное 𝟾 — зависит от контекста. Если нужен восьмеричный парсинг, пишите 𝚒𝚗𝚝("𝟶𝟷𝟶", 𝟾) явно.
Развёрнутое пояснение
1️⃣Внутри блока 𝚎𝚡𝚌𝚎𝚙𝚝 создаются две переменные: 𝚎 (алиас исключения) и 𝚖𝚜𝚐 (обычная строка).
2️⃣По спецификации Python, 𝚎𝚡𝚌𝚎𝚙𝚝 ... 𝚊𝚜 𝚎 неявно выполняет 𝚍𝚎𝚕 𝚎 при выходе из блока. Это сделано потому, что объект исключения хранит ссылку на traceback, который ссылается на все локальные переменные фрейма — без удаления возникнет утечка памяти.
3️⃣Переменная 𝚖𝚜𝚐 — обычная строка, она не удаляется и доступна после блока.
4️⃣𝚙𝚛𝚒𝚗𝚝(𝚖𝚜𝚐) срабатывает, а вот второй, а 𝚙𝚛𝚒𝚗𝚝(e) при обращении к 𝚎 выбрасывает NameError.
Почему это важно
Если нужно сохранить исключение для использования после блока 𝚎𝚡𝚌𝚎𝚙𝚝, его нужно явно присвоить другой переменной (как 𝚖𝚜𝚐 в примере). Иначе код упадёт в неожиданном месте.
Премия Tproger объявляется открытой! 🐀
Каждый год команды разработки фиксят баги, выкатывают редизайн, добавляют фичи или создают совершенно новые продукты внутри известных нам брендов. Какие-то результаты работы мы видим, но чаще внутрянка не доступна и оценить по достоинству ее не получается.
Отсюда родилась идея Премии Tproger. В ней ИТ-компании делятся успешными кейсами разработки, а аудитория решает, какой проект заслуживает награды — золотой мыши 🐀
В премии участвуют 16 компаний в 4 номинациях:
⚫ Продукт года
Здесь представлены платформенные решения, направленные на комплексную автоматизацию ключевых направлений деятельности: от контроля безопасности разработки ПО и ИТ-инфраструктуры до управления ресурсами компании.⚫ Облачный продукт года
В этом разделе вас ждут платформы виртуализации, облачные среды для AI/ML, инструменты управления кластерами и микросервисами, обеспечивающие высокую производительность и быстрый запуск цифровых сервисов. ⚫IT-ивент года
Участники рассказывают о профессиональных конференциях и хакатонах, объединяющих тысячи разработчиков и инженеров.⚫ Дизайн года
В номинации представлены проекты, где дизайн встречается с инженерией: нейросети, создающие презентации за секунды; инсталляции, собравшие десятки миллионов контактов; и визуальные стратегии, транслирующие ценности разработки.Теперь они в ваших руках 👍 1. Переходите на сайт премии. 2. Выбирайте понравившиеся кейсы в каждой категории. 3. И вручайте им золотую мышь. Голосование продлится до конца февраля и уже в марте мы объявим победителей. Stay tuned!
Развёрнутое пояснение
1️⃣Оператор | для словарей появился в Python 3.9 и создаёт новый словарь из двух исходных.
2️⃣Сначала берутся все пары из 𝚍𝟷: "𝚊": 𝟷, "𝚋": 𝟸.
3️⃣Затем добавляются пары из 𝚍𝟸: "𝚋": 𝟹, "𝚌": 𝟺. Ключ "𝚋" уже есть — его значение перезаписывается значением из правого словаря.
4️⃣Итог: {"𝚊": 𝟷, "𝚋": 𝟹, "𝚌": 𝟺}.
5️⃣Если поменять порядок: 𝚍𝟸 | 𝚍𝟷, то "𝚋" будет равно 𝟸 (из 𝚍𝟷).
Почему это важно
Порядок операндов критичен при слиянии конфигов, настроек по умолчанию и пользовательских значений. Паттерн 𝚍𝚎𝚏𝚊𝚞𝚕𝚝𝚜 | 𝚞𝚜𝚎𝚛_𝚌𝚘𝚗𝚏𝚒𝚐 — правильный, потому что пользовательские значения должны перезаписывать дефолтные.
