Python: Именованные аргументы
Функции в Python можно вызывать по`разному. До этого мы передавали значения строго по порядку: первое значение шло в первый параметр, второе — во второй и так далее. Такой способ называется позиционным вызовом.
Но в Python есть ещё один вариант — именованные аргументы. При вызове функции мы явно указываем имя параметра, которому передаём значение. Он особенно удобен, когда у функции много параметров или не все из них нужно менять — тогда можно указать только нужные по имени, а остальные оставить со значениями по умолчанию.
def repeat(text, times=1):
return text * times
repeat("Hi", 3) # позиционный вызов
repeat(text="Hi", times=3) # именованный вызов
Оба варианта делают одно и то же. Но во втором случае мы явно написали, что "Hi" — это text, а 3 — это times. С точки зрения определения функции ничего не поменялось, именованные аргументы могут использоваться для любой функции, сама функция об этом ничего не знает. Она получает значения, так как они описаны в определении.
Именованные аргументы можно указывать в любом порядке. Это не меняет результат работы функции, потому что значения связываются именно по имени параметра.
repeat(times=3, text="Hi") # => 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()
внутри. Главное – чтобы она выполняла поставленную задачу
Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект
Если вы зашли в тупик, то самое время поговорить с нашим асситентом Тота во вкладке "ИИ-помощник":
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи. В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в обратной связи нашего сообщества
Ваше упражнение проверяется по этим тестам
import index
def test():
assert index.trim_and_repeat("python") == "python"
assert index.trim_and_repeat("python", offset=4) == "on"
assert index.trim_and_repeat("python", repetitions=2) == "pythonpython"
assert index.trim_and_repeat("python", offset=4, repetitions=2) == "onon"
Решение учителя откроется через:
20:00
