← Все вопросы
Как сделать значение аргумента по умолчанию, которое зависит от другого аргумента?
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. Прямо в сигнатуре сослаться на другой аргумент нельзя.
Ваш ответ
Войдите, чтобы ответить на вопрос.