Функции и их вызов

Как вы заметили, для каждой операции требуется свой собственный символ (оператор): для сложения чисел — +, для конкатенации строк — +, для деления чисел — /, и так далее. Такой подход оправдан только для самых частых операций, ведь в реальной жизни есть тысячи разных задач. К тому же, даже если бы язык программирования включал в себя тысячу разных операторов, в какой-то момент программисту понадобился бы новый.

Любой язык программирования позволяет расширять набор операций. Такие новые операции называются «функциями». Давайте сначала научимся пользоваться уже созданными функциями, а уже потом будем создавать новые функции.

В Python есть функция для возведения числа в какую-нибудь степень. Вызовем её:

result = pow(2, 3)  # 8

Мы создали переменную result и указали интерпретатору записать в неё результат, который выдаст функция pow. Запись pow(2, 3) означает, что вызывается функция с именем pow и с аргументами (или с параметрами) 2 и 3. Вызванная функция вернула значение.

Аргументы — это информация, которую функция получает при вызове. Именно на основе этой информации функция, как правило, вычисляет что-то и выдает результат.

Функция pow возводит первое число в степень второго числа. В нашем примере мы возводили 2 в степень 3, поэтому в result в итоге оказалось значение 8.

Вызов функции всегда обозначается скобками (), идущими сразу за именем функции. В скобках может быть любое количество аргументов, а иногда — вообще ни одного. Количество зависит от выполняемой операции. Например, для нахождения модуля числа используется функция с именем abs:

result = abs(-5)  # 5
result = abs(8)   # 8

Как видно, эта функция принимает один аргумент (часто говорят «параметр») и возвращает его модуль. А вот пример функции, которая не принимает аргументов:

result = str()  # ''

Функция str возвращает пустую строку, если вызвана без аргумента.

Но математические операции — капля в море по сравнению со всем многообразием функций. Мощь в том, что вы можете создавать собственные функции — мы займёмся этим в следующем модуле. Любое действие, которое вы себе можете вообразить, в программировании представлено функциями.

Задание

В 7 королевствах жил один человек, который имел доступ к компьютерам и умел программировать — Сэм Тарли. Он занимался картографией, поэтому он написал для себя функцию calculate_distance, высчитывающую расстояние (в лигах) между городами. Функция принимает два строковых параметра — два названия городов, и возвращает число — расстояние между ними.

Вот пример использования, где на экран выводится расстояние между Lannisport и Bayasabhad:

from hexlet.code_basics import calculate_distance

distance = calculate_distance('Lannisport', 'Bayasabhad')
print(distance)

Первая строчка — это специальный код, подключающий функцию calculate_distance в вашу программу. Благодаря ней вы можете запускать функцию, но не видите её содержимое. Это обычное дело в программировании: вы знаете, что делает функция и как ей пользоваться, но не знаете как именно она работает внутри.

Воспользуйтесь функцией calculate_distance и выведите на экран расстояние между городами Qarth и Vaes Dothrak. Не копируйте пример, а создайте переменную с другим именем и напишите код с нуля самостоятельно.


Определения

  • Функция — операция, способная принимать данные и возвращать результат; функция вызывается так: foo().

  • Аргумент — информация, которую функция получает при вызове. Например, foo(42) — передача аргумента 42 функции foo.


Нашли ошибку? Есть что добавить? Пулреквесты приветствуютсяhttps://github.com/hexlet-basics

Упражнение доступно только авторизованным пользователям.

Пожалуйста, авторизуйтесь с помощью учётной записи GitHub, это необходимо для отслеживания прогресса выполнения уроков. Если у вас ещё нет учётной записи, то сейчас самое время создать аккаунт на GitHub.