|
| 1 | +Функции могут принимать параметры. Иногда удобно задать значение сразу в определении функции, чтобы не указывать его при каждом вызове. Такое значение называется **значением по умолчанию**. |
1 | 2 |
|
2 | | -В программировании у многих функций и методов есть параметры, которые редко меняются. В таких случаях этим параметрам задают значения по умолчанию, которые можно поменять по необходимости. С помощью этого сокращается количество одинакового кода. Рассмотрим, как это выглядит на практике. |
| 3 | +Если аргумент не передан, используется это значение. Если аргумент указан, то оно заменяет умолчание. |
3 | 4 |
|
4 | | -Разберем пример: |
| 5 | +## Пример: повторение текста |
| 6 | + |
| 7 | +Сделаем функцию, которая повторяет строку несколько раз. По умолчанию пусть будет один раз, но при желании можно указать другое количество. |
5 | 8 |
|
6 | 9 | ```python |
7 | | -# Функция возведения в степень |
8 | | -# Второй параметр имеет значение по умолчанию два |
9 | | -def pow(x, base=2): |
10 | | - return x ** base |
11 | | - |
12 | | -# Три во второй степени (двойка задана по умолчанию) |
13 | | -pow(3) # 3 * 3 = 9 |
14 | | -# Три в третьей степени |
15 | | -pow(3, 3) # 3 * 3 * 3 = 27 |
| 10 | +def repeat(text, times=1): |
| 11 | + return text * times |
| 12 | + |
| 13 | +print(repeat("Hi")) # => Hi |
| 14 | +print(repeat("Hi", 3)) # => HiHiHi |
16 | 15 | ``` |
17 | 16 |
|
| 17 | +В этом примере используется операция умножения строки на число. Она работает так: берётся исходная строка и повторяется указанное количество раз. Например, `"A" * 5` превратится в `"AAAAA"`. Это встроенная возможность Python, которая часто применяется при генерации шаблонов, разделителей и повторяющихся фрагментов текста. |
18 | 18 |
|
19 | | -Значение по умолчанию выглядит как обычное присваивание в определении. Оно срабатывает только в том случае, если параметр не передали. |
| 19 | +Необязательные параметры всегда указываются в конце списка параметров. Поэтому в примере сначала идёт обязательный параметр `text`, а уже после него — параметр `times` со значением по умолчанию. |
20 | 20 |
|
21 | | -Представьте, что вы не привезли с собой в автосервис запчасти для вашего автомобиля. Тогда автомеханик предложит вам поставить те, которые есть у него — по умолчанию. |
| 21 | +## Пример: склейка слов с разделителем |
22 | 22 |
|
23 | | -Значение по умолчанию может быть даже в том случае, когда параметр один: |
| 23 | +По умолчанию слова соединяются пробелом, но можно указать другой символ. |
24 | 24 |
|
25 | 25 | ```python |
26 | | -def my_print(text='nothing'): |
27 | | - print(text) |
| 26 | +def join_words(word1, word2, sep=" "): |
| 27 | + return word1 + sep + word2 |
28 | 28 |
|
29 | | -my_print() # => "nothing" |
30 | | -my_print("Hexlet") # => "Hexlet" |
| 29 | +print(join_words("King", "Road")) # => King Road |
| 30 | +print(join_words("Dragon", "stone", "-")) # => Dragon-stone |
31 | 31 | ``` |
32 | 32 |
|
33 | | -Параметров со значениями по умолчанию может быть любое количество: |
| 33 | +## Пример: несколько параметров по умолчанию |
34 | 34 |
|
35 | | -```python |
36 | | -def f(a=5, b=10, c=100): |
37 | | -``` |
38 | | - |
39 | | -У значений по умолчанию есть одно ограничение. Они должны идти в самом конце списка параметров. С точки зрения синтаксиса, невозможно создать функцию, у которой после необязательного параметра идет обязательный: |
| 35 | +Функция может содержать более одного параметра со значениями по умолчанию. Например, сделаем функцию, которая строит строку-разделитель. По умолчанию символ — это дефис, а длина — 10. |
40 | 36 |
|
41 | 37 | ```python |
42 | | -# Такой код завершится с ошибкой |
43 | | -def f(a=5, b=10, c=100, x): |
44 | | -# И такой |
45 | | -def f(a=5, b=10, x, c=100): |
46 | | - |
47 | | -# Этот код сработает |
48 | | -def f(x, a=5, b=10, c=100): |
| 38 | +def make_line(symbol="-", length=10): |
| 39 | + return symbol * length |
49 | 40 |
|
50 | | -# Этот тоже сработает |
51 | | -def f(x, y, a=5, b=10, c=100): |
| 41 | +print(make_line()) # => ---------- |
| 42 | +print(make_line("*")) # => ********** |
| 43 | +print(make_line("*", 5)) # => ***** |
| 44 | +print(make_line("#", 3)) # => ### |
52 | 45 | ``` |
53 | | - |
54 | | -Теперь вы умеете работать со значениями параметров по умолчанию. Они могут быть как у нескольких параметров, так и у одного. И помните, что значения по умолчанию должны быть в самом конце списка параметров. Эти знания помогут сократить количество одинакового кода. |
0 commit comments