Функции

Параметры по умолчанию и несколько возвращаемых значений

Содержание курса

Ошибка порядка параметров и правило расстановки

Python требует, чтобы все параметры со значениями по умолчанию шли после обязательных. Это не стилевое соглашение — это жёсткое синтаксическое правило. Если его нарушить, интерпретатор бросит SyntaxError ещё до запуска программы.

Посмотрим на неверный вариант:

def power(exp=2, base):  # SyntaxError!
    return base ** exp

Python не сможет разобрать эту сигнатуру и выдаст:

SyntaxError: non-default argument follows default argument

Почему это запрещено? Когда Python видит вызов power(3), ему нужно однозначно решить, какому параметру принадлежит аргумент 3. Если параметр со значением по умолчанию стоит первым, возникает неразрешимая неоднозначность: то ли 3 — это exp, то ли base, то ли Python должен «пропустить» exp и отдать 3 в base? Интерпретатор не угадывает — он просто запрещает такую сигнатуру.

Правильный порядок — сначала обязательные, потом необязательные:

def power(base, exp=2):
    return base ** exp

Теперь при вызове всё однозначно. Можно передать только base, и exp возьмёт значение по умолчанию. Можно передать оба аргумента, и значение по умолчанию будет проигнорировано:

print(power(3))     # 9  — exp = 2 (по умолчанию)
print(power(3, 3))  # 27 — exp = 3 (переопределён)

Оба вызова корректны. Первый — типичный сценарий, когда дефолтного значения достаточно. Второй — когда нужно переопределить поведение без создания новой функции.

Запомнить правило просто: смотришь на сигнатуру слева направо — сначала идут все параметры без =, потом все с =. Любое другое чередование — ошибка.

Начать заново?

Помощник начнёт новый диалог по этой задаче. Текущая переписка останется в истории до конца срока хранения.

О переписке

Можно приложить до трёх фото PNG, JPEG или WebP по 5 МБ.

Переписка и фото хранятся 90 дней после последнего принятого сообщения. Преподаватель получит доступ к диалогу, когда вы попросите его помочь.

Проверка решения остаётся отдельным действием.