/
Программирование
/
Курс Python
/

Именованные аргументы

Python: Именованные аргументы

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

def repeat(text, times=1):
    return text * times

repeat("Hi", 3)             # позиционный вызов
repeat(text="Hi", times=3)  # именованный вызов

Оба варианта делают одно и то же. Во втором случае мы явно написали, что "Hi" является значением text, а 3 является значением times. С точки зрения определения функции ничего не поменялось. Именованные аргументы работают для любой функции, и сама функция об этом ничего не знает. Она получает значения так, как они описаны в определении.

def truncate(text, length):
    ...

Позиционные:  truncate('hello', 3)
                       └──┬──┘  └┬┘
                       text    length

Именованные:  truncate(length=3, text='hello')
                       └──┬───┘  └─────┬─────┘
                       length         text

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

repeat(times=3, text="Hi")  # => HiHiHi

Именованные аргументы можно комбинировать с позиционными, при этом позиционные идут первыми. Такой вызов позволяет указывать только те параметры, которые нужно переопределить.

repeat("Hi", times=3)  # позиционные + именованные => HiHiHi

Когда использовать именованные аргументы

Именованные аргументы полезны, когда у функции есть несколько параметров и не все из них нужно менять. В таких случаях можно указать только те параметры, которые важны в конкретном вызове, а остальные оставить со значениями по умолчанию.

def make_line(symbol="-", length=10):
    return symbol * length

make_line()          # все параметры по умолчанию

make_line(length=5)  # меняем только длину
# Без этого пришлось бы писать так
make_line("-", 5)

Символ указывать не пришлось, даже несмотря на то, что он идет в списке параметров раньше длины. Именованные аргументы делают вызовы понятнее. Читая код, сразу видно, какое значение к какому параметру относится.

Задание

Программа готовит текст уведомлений: убирает ненужные символы с начала и повторяет сообщение нужное количество раз. Реализуйте функцию trim_and_repeat(), которая принимает три параметра:

  • Строку
  • offset — число символов, на которое нужно обрезать строку слева
  • repetitions — сколько раз нужно повторить строку перед возвратом получившейся строки

Число символов для среза по умолчанию равно 0, а количество повторений по умолчанию равно 1.

Функция должна возвращать полученную строку.

text = 'python'

trim_and_repeat(text, offset=3, repetitions=2)  # honhon
trim_and_repeat(text, repetitions=3)  # pythonpythonpython
trim_and_repeat(text)  # python

Подсказки

  • Реализовать эту функцию можно различными способами
  • С точки зрения проверочной системы не имеет значения, каким из способов будет реализована функция trim_and_repeat() внутри. Главное – чтобы она выполняла поставленную задачу

Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются