Выбор ответа Middle Функции и области видимости обновлено

Когда вычисляется значение по умолчанию

Вопрос

Модуль импортирован в 10:00. В 12:00 вызвали log("x"). Какое время будет в at?

from datetime import datetime

def log(msg, at=datetime.now()):
    return f"{at:%H:%M} {msg}"

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: 10:00, время выполнения def. Выражение значения по умолчанию вычисляется один раз, когда выполняется def, то есть при импорте модуля.

Варианты ответа

  1. 12:00, время вызова функции
  2. 10:00, время выполнения defправильный ответ
  3. Время последнего вызова log
  4. None, пока не передать at

Разбор

Выражение значения по умолчанию вычисляется один раз, когда выполняется def, то есть при импорте модуля. Все вызовы без at получат одно и то же время 10:00. Правильно: at=None и at = at or datetime.now() (или if at is None) внутри функции.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.