Тело if выполнится, а x будет равно 1. Оператор := сначала присваивает результат data.get('a') переменной x, затем условие проверяет истинность этого результата.
Применение оператора присваивания в условии if
Тело if выполнится, а x будет равно 1. Оператор := сначала присваивает результат data.get('a') переменной x, затем условие проверяет истинность этого результата.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите, выполнится ли тело блока if и какое значение будет записано в переменную x после выполнения следующего кода.
data = {'a': 1}
if x := data.get('a'):
pass
Ответ
Тело if выполнится, а x будет равно 1. Оператор := сначала присваивает результат data.get('a') переменной x, затем условие проверяет истинность этого результата.
Оператор присваивания-выражения не превращает результат в bool: x остаётся целым числом 1. Сам блок ничего не делает, поскольку содержит pass.
Если значение ключа было бы 0, пустой строкой или None, x получил бы это значение, но тело if не выполнилось бы. Для проверки именно отсутствия None пишут:
if (x := data.get('a')) is not None:
pass
Так можно отличить допустимый ноль от отсутствующего значения, если None выбран признаком отсутствия.