|
| 1 | +Программирование нужно для того, чтобы выполнять самые разные операции. Иногда это простые действия, например сложение чисел или объединение строк. Но чаще речь идёт о сложных процессах: перевод денег со счёта на счёт, оформление заказа в интернет-магазине, расчёт налогов или подготовка отчёта. |
1 | 2 |
|
2 | | -Сложение, конкатенация, нахождение остатка от деления и остальные рассмотренные операции — это базовые возможности языков программирования. Математика не ограничена арифметикой, кроме нее есть и другие разделы со своими операциями ⎯ например, геометрия. То же самое касается и строк: их можно переворачивать, менять регистр букв, удалять лишние символы — и это только самое простое. |
| 3 | +Такие операции невозможно выразить одной командой. За действием вроде «перевести деньги» может скрываться десятки, сотни и даже тысячи строк кода: проверка баланса, списание суммы, учёт комиссии, обновление базы данных, отправка уведомления пользователю. |
3 | 4 |
|
4 | | -Еще на более высоком уровне есть прикладная логика конкретного приложения. Программы списывают деньги, считают налоги, формируют отчеты. Количество подобных операций бесконечно и индивидуально для каждой программы. И их нужно уметь выражать в коде. |
| 5 | +Чтобы управлять этим кодом и не теряться в деталях, используют функции. Функция объединяет блок кода в единое целое, прячет реализацию и позволяет сосредоточиться на смысле. Для программиста достаточно вызвать функцию и доверить ей всю внутреннюю работу. |
5 | 6 |
|
6 | | -Чтобы выразить любую произвольную операцию, в программировании существует понятие **функция**. Функции бывают встроенные и добавленные программистом. С одной встроенной функцией мы уже знакомы ⎯ это `print()`. |
| 7 | +Представим функцию, которая переводит деньги с одного счёта на другой. В реальности внутри неё может быть сотни строк кода, но мы этого не видим. Снаружи всё выглядит как одна простая команда: |
7 | 8 |
|
8 | | -Функции — одна из ключевых конструкций в программировании. Без них невозможно сделать практически ничего. Знакомство с ними нужно начинать как можно раньше, так как весь дальнейший материал оперирует функциями по максимуму. Сначала мы научимся пользоваться уже созданными функциями, а потом научимся создавать собственные. |
| 9 | +```python |
| 10 | +transfer_money('Alice', 'Bob', 100) |
| 11 | +``` |
| 12 | + |
| 13 | +Эта строка означает: вызвать функцию с именем `transfer_money()`, передать ей три значения — отправителя `Alice`, получателя `Bob` и сумму `100`. |
| 14 | + |
| 15 | +Вот ещё несколько примеров вызова функций, которые мы могли бы реализовать. У каждой функции своё имя и свой набор данных для работы. |
| 16 | + |
| 17 | +```python |
| 18 | +# Да-да, print тоже функция |
| 19 | +print('Хекслет!') |
| 20 | + |
| 21 | +# Отправка письма пользователю |
| 22 | +send_email('bob@example.com', 'Добро пожаловать!') |
| 23 | + |
| 24 | +# Вычисление налога с указанной суммы |
| 25 | +calculate_tax(5000, 'Florida') |
| 26 | + |
| 27 | +# Проверка, есть ли пользователь в системе |
| 28 | +is_registered('Alice') |
| 29 | + |
| 30 | +# Получение случайного числа от 1 до 10 |
| 31 | +random_number(1, 10) |
| 32 | + |
| 33 | +# Создание резервной копии базы данных |
| 34 | +backup_database() |
| 35 | +``` |
9 | 36 |
|
10 | | -Начнем с простых функций для работы над строками. |
| 37 | +## Как устроен вызов функции |
11 | 38 |
|
12 | | -Функция `len()` считает количество символов в строке. Ниже пример ее вызова: |
| 39 | +Вызов функции всегда выглядит одинаково: сначала пишется её **имя**, затем круглые **скобки**. Скобки показывают, что это именно вызов, а не просто имя. Так мы понимаем, что перед нами функция, а не переменная. |
| 40 | + |
| 41 | +Внутри скобок указываются **аргументы** — данные, которые функция получает для работы. Их может быть несколько, один или вовсе ни одного. |
| 42 | + |
| 43 | +```python |
| 44 | +# имя функции — transfer_money |
| 45 | +# аргументы — 'Alice', 'Bob', 100 |
| 46 | +transfer_money('Alice', 'Bob', 100) |
| 47 | + |
| 48 | +# имя функции — backup_database |
| 49 | +# аргументов нет, скобки остаются пустыми |
| 50 | +backup_database() |
| 51 | +``` |
| 52 | + |
| 53 | +## Откуда берутся функции? |
| 54 | + |
| 55 | +Функции бывают двух видов: встроенные в язык (built-in) и созданные программистами. |
| 56 | + |
| 57 | +**Встроенные функции** — это те, что идут вместе с языком Python. Их можно использовать сразу, без дополнительных действий. Пример — функция `print()`, которая выводит данные на экран: |
13 | 58 |
|
14 | 59 | ```python |
15 | | -# Вызов функции len с параметром 'Hello!' |
16 | | -result = len('Hello!') |
17 | | -print(result) # => 6 |
| 60 | +print('Hello, World!') |
| 61 | +``` |
| 62 | + |
| 63 | +**Функции, определяемые программистами**, создаются тогда, когда нужно оформить свою логику в отдельный блок. Такую функцию можно назвать любым именем и использовать в коде так же, как встроенные. Мы научимся этому позже. |
| 64 | + |
| 65 | +Кроме того, существуют функции, которые находятся в отдельных библиотеках. Чтобы ими пользоваться, их нужно подключать с помощью механизма импорта. Подробно импорт мы пока не разбираем, но в двух словах: это способ «подключить» внешний набор функций и сделать их доступными в программе. |
| 66 | + |
| 67 | +## Функция с одним параметром |
| 68 | + |
| 69 | +Одной из самых часто используемых встроенных функций является `len()`. Она возвращает размер переданных данных, если это строка, то длину строки, то есть количество символов: |
| 70 | + |
| 71 | +```python |
| 72 | +message = 'Hello!' |
| 73 | +count = len(message) |
| 74 | +print(count) # => 6 |
| 75 | +``` |
| 76 | + |
| 77 | +Здесь в строке `'Hello!'` шесть символов, поэтому вызов `len(message)` вернёт число `6`. |
| 78 | + |
| 79 | +## Возврат значения |
| 80 | + |
| 81 | +Возврат значения — один из ключевых принципов работы функций. Благодаря ему мы можем соединять результаты разных действий и строить более сложную логику. Если функция возвращает значение, то мы можем сохранить его в переменную, передать в другую функцию или использовать в вычислениях. Именно так работает `len()`: она считает количество элементов и отдаёт результат «наружу». |
| 82 | + |
| 83 | +```python |
| 84 | +message1 = 'Hello!' |
| 85 | +length1 = len(message1) # сохраняем результат |
| 86 | + |
| 87 | +message2 = 'World!' |
| 88 | +length2 = len(message2) |
| 89 | + |
| 90 | +combined_length = length1 + length2 # используем результат в выражении |
| 91 | +print(combined_length) |
| 92 | +``` |
| 93 | + |
| 94 | +Если бы `len()` сразу печатала результат на экран (как делает `print()`), то мы бы увидели число, но не смогли бы его использовать: |
| 95 | + |
| 96 | +```python |
| 97 | +# воображаемая функция, которая только печатает результат |
| 98 | +fake_len('Hello!') # напечатает 6 |
| 99 | + |
| 100 | +# но дальше это число уже недоступно |
| 101 | +# мы не можем его прибавить, сохранить или сравнить |
| 102 | +result = fake_len('Hello!') # здесь в result ничего нет |
| 103 | +``` |
| 104 | + |
| 105 | +Вот почему возврат значения — настолько важная концепция. Он позволяет связывать функции между собой: одни функции возвращают данные, другие используют их в своей работе. Именно так из маленьких шагов строятся большие и сложные программы. |
| 106 | + |
| 107 | +## Функция с несколькими параметрами |
| 108 | + |
| 109 | +Некоторые функции принимают сразу несколько данных для работы. Пример — встроенная функция `pow()`. Она возводит число в степень: первый параметр — это основание, второй — показатель степени. |
| 110 | + |
| 111 | +```python |
| 112 | +# 2 возводим в 3-ю степень: 2 * 2 * 2 |
| 113 | +result = pow(2, 3) |
| 114 | +print(result) # => 8 |
| 115 | + |
| 116 | +# 5 во 2-й степени: 5 * 5 |
| 117 | +print(pow(5, 2)) # => 25 |
18 | 118 | ``` |
19 | 119 |
|
20 | | -**Параметры или аргументы** — это информация, которую функция получает при вызове. На основе этой информации функция обычно вычисляет и выдает результат. |
| 120 | +Вызов функции с несколькими параметрами работает так же, как и с одним: имя функции, круглые скобки и перечисленные внутри аргументы через запятую. |
21 | 121 |
|
22 | | -Мы создали переменную `result` и указали интерпретатору конкретное действие: надо записать в нее результат, который возвращается функцией `len()` при ее вызове. В этом смысле функции подобны операциям — они всегда возвращают результат своей работы. Запись `len('Hello!')` означает, что вызывается функция с именем *len*, в которую передали параметр `'Hello!'`. Функция `len()` считает длину той строки, которую ей передали. |
| 122 | +## Параметры и аргументы |
23 | 123 |
|
24 | | -Вызов функции всегда обозначается скобками `()`, которые идут сразу за именем функции. В скобках может быть любое количество параметров, а иногда ни одного. Количество зависит от используемой функции. |
| 124 | +Часто вместе с функциями упоминают два слова: **параметры** и **аргументы**. Они связаны, но не одно и то же. |
25 | 125 |
|
26 | | -Возьмем для примера функцию `pow()`, которая возводит указанное число в нужную степень. Она принимает на вход два параметра: берет первый параметр и возводит его в степень, переданную вторым параметром: |
| 126 | +- **Параметры** — это имена «мест для данных», которые ожидает функция. |
| 127 | +- **Аргументы** — это конкретные значения, которые мы передаём в эти места при вызове. |
27 | 128 |
|
28 | 129 | ```python |
29 | | -result = pow(2, 3) # 2 * 2 * 2 |
30 | | -print(result) # => 8 |
| 130 | +# функция pow ожидает два параметра: основание и степень |
| 131 | +# при вызове мы передаём им аргументы — числа 2 и 3 |
| 132 | +print(pow(2, 3)) # => 8 |
31 | 133 | ``` |
32 | 134 |
|
33 | | -Мы разобрались, как пользоваться простыми встроенными функциями. Но это не весь их перечень. Больше о функциях вы узнаете в следующих уроках |
| 135 | +Таким образом, параметры описывают, какие данные нужны функции, а аргументы — это фактические значения, которые мы передаём в момент вызова. Запоминать это не обязательно, скорее, это пригодится при чтении англоязычной литературы. |
0 commit comments