DamiRocK

Python: именованные аргументы в trim_and_repeat()

Срезаем начало текста и повторяем остаток. Передаём offset и repetitions по имени, сохраняем значения по умолчанию и уточняем исключение для positional-only параметров.

Связь по имени, а не по позиции

Именованный аргумент явно указывает, какому параметру передаётся значение. Это позволяет изменить поздний необязательный параметр, не повторяя значения предыдущих. При обычном вызове позиционные аргументы записываются перед именованными.

Задание источника

Создайте 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. Упражнение сохранено; обобщение о вызовах исправлено.

Reading preferences

Appearance
Contrast
More options

Saved only in this browser. Your device’s reduced-motion setting is always respected. Browser zoom works throughout the site.