Разбор по шагам 1️⃣Вызывается test() 2️⃣Выполняется блок try, доходим до return 1 3️⃣Python запоминает, что нужно вернуть 1, но перед выходом из функции обязан выполнить блок finally 4️⃣Входим в finally → встречаем return 2 5️⃣Запомненное значение 1 безвозвратно отбрасывается 6️⃣Функция завершается с возвратом 2 7️⃣print(2) выводит 2 Почему это важно Никогда не используйте операторы управления потоком (return, break, continue) внутри finally. Это антипаттерн: он может скрывать исключения и ломат...
Python: задачки и вопросы
Вопросы и задачки для подготовки к собеседованиям и прокачки навыков Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Другие наши проекты: https://tprg.ru/media
Графики
📊 Средний охват постов
📉 ERR % по дням
📋 Публикации по дням
📎 Типы контента
Лучшие публикации
20 из 20Разбор по шагам 1️⃣Выражение t[1] += [3] под капотом разбивается на две операции: t[1].iadd([3]) и последующее присваивание t[1] = ... 2️⃣Первый шаг выполняется успешно — метод iadd мутирует список на месте, и он становится [2, 3]. 3️⃣Второй шаг (присваивание обратно по индексу) бросает TypeError, так как кортежи неизменяемы. 4️⃣Ошибка перехватывается блоком except, где выводится строка 'Error ' без перехода на новую строку. 5️⃣Выполнение продолжается, и print(t) выводит кортеж с уже изменённым ...
Объяснение по шагам 1️⃣Цикл for i in range(3) запускается: i принимает значения 0, 1, 2 2️⃣На каждой итерации создаётся лямбда lambda: i — но она не запоминает текущее значение i, а сохраняет лишь ссылку на имя i 3️⃣Список funcs теперь содержит три функции, каждая смотрит на одно и то же имя i 4️⃣Цикл завершился — переменная i в области видимости равна 2 5️⃣f() вызывается для первой лямбды → ищет i → находит 2 → возвращает 2 6️⃣То же самое для второй и третьей лямбды 7️⃣print([2, 2, 2]) выводит ...
Подробное объяснение (по шагам) 1️⃣При создании словаря сначала добавляется пара True: "yes". 2️⃣Затем интерпретатор видит ключ 1. Так как тип bool наследуется от int, для питона True == 1. Их хэши тоже равны. Вместо создания нового ключа, обновляется значение старого: словарь становится {True: "no"}. 3️⃣Затем идёт ключ 1.0. Значение 1.0 == 1 == True. Снова происходит перезапись значения по существующему ключу. 4️⃣Итоговый словарь выглядит так: {True: "maybe"}. Его длина равна 1. 5️⃣При обращени...
Подробное объяснение 1️⃣Под капотом Python булевы значения являются обычными числами: True ведёт себя как 1, а False как 0. 2️⃣Первое действие в скобках: (x + y) превращается в (1 + 0), что даёт 1. 3️⃣Затем происходит умножение: 1 * 5 равно 5. 4️⃣Второе действие в скобках: (x == y) проверяет, равно ли True значению False. Это ложь, поэтому возвращается False, которое в математическом контексте равно 0. 5️⃣Итоговое сложение: 5 + 0 даёт результат 5. Почему это важно С одной стороны, это позволяет ...