← Все вопросы

Как сделать значение аргумента по умолчанию, которое зависит от другого аргумента?

Задан 19 месяцев назад453 просмотров2 ответа
10

Хочу функцию draw(width, height=ширине), то есть по умолчанию высота равна ширине, а если передали — берётся переданная. Но def draw(width, height=width) выдаёт ошибку, что width не определён. Как это правильно сделать?

2 ответа

18

Значения по умолчанию вычисляются один раз при определении функции, когда других аргументов ещё нет — поэтому height=width и не работает. Стандартный приём: поставить дефолт None, а реальное значение подставить внутри тела.

def draw(width, height=None):
    if height is None:
        height = width
    print(width, height)

draw(10)      # 10 10
draw(10, 3)   # 10 3

Именно is None, а не if not height:, иначе осмысленный height=0 ошибочно заменится на width.

Санчо Панчо Проверка через `is None` критична — на 0 обычный if not сломается · 19 месяцев назад
6

Поставь height=None и внутри: if height is None: height = width. Прямо в сигнатуре сослаться на другой аргумент нельзя.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект