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()внутри. Главное – чтобы она выполняла поставленную задачу
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()внутри. Главное – чтобы она выполняла поставленную задачу
Ваше упражнение проверяется по этим тестам
import solution
def test():
assert solution.trim_and_repeat("python") == "python"
assert solution.trim_and_repeat("python", offset=4) == "on"
assert solution.trim_and_repeat("python", repetitions=2) == "pythonpython"
assert solution.trim_and_repeat("python", offset=4, repetitions=2) == "onon"Решение учителя откроется через:
20:00
