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
— количество обрезанных строк, которые нужно вывести. Функция обрезает строку и повторяет ее столько раз, чтобы общее количество обрезанных строк равнялось repetitions
. Функция должна записать результат в одну строку и вернуть его. Число символов для среза по умолчанию равно 0, а повторений — 1.
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
Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект
Если вы зашли в тупик, то самое время поговорить с нашим асситентом Тота во вкладке "ИИ-помощник":
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи. В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в обратной связи нашего сообщества
Ваше упражнение проверяется по этим тестам
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
