Связь по имени, а не по позиции
Именованный аргумент явно указывает, какому параметру передаётся значение. Это позволяет изменить поздний необязательный параметр, не повторяя значения предыдущих. При обычном вызове позиционные аргументы записываются перед именованными.
Задание источника
Создайте trim_and_repeat(text, offset=0, repetitions=1). Функция должна убрать offset символов слева, повторить остаток repetitions раз и вернуть строку:
def trim_and_repeat(text, offset=0, repetitions=1):
return text[offset:] * repetitions
Три проверки
text = "python"
print(trim_and_repeat(text, offset=3, repetitions=2)) # honhon
print(trim_and_repeat(text, repetitions=3)) # pythonpythonpython
print(trim_and_repeat(text)) # python
Во втором вызове offset не передан и остаётся нулём. В первом сначала получается "hon", затем повторяется уже эта подстрока. Перестановка именованных offset и repetitions не меняет соответствие параметрам.
Ошибки вызова
Одному параметру нельзя передать два значения одновременно — позиционно и по имени. Неизвестное имя также вызывает ошибку, если функция не принимает произвольные именованные аргументы. Эти правила помогают обнаружить опечатки в вызовах.
Не все параметры допускают имя
В источнике говорится, что именованные аргументы работают для любой функции. Это неверно для позиционных параметров, помеченных как positional-only. Например, len(obj="abc") недопустим, хотя len("abc") работает. Сигнатура функции определяет разрешённые способы передачи.
В текущем определении все три параметра можно передавать по имени. Ограничение на положительность repetitions и offset источник не формулирует; для учебных неотрицательных целых срез и повторение дают ожидаемый результат. Производственная валидация была бы отдельным расширением.
Hexlet / Code Basics и участники · Исходный урок · Особые параметры: документация Python · GNU AGPL v3. Упражнение сохранено; обобщение о вызовах исправлено.