Функции: объявление, параметры, возвращаемые значения
Функции — одна из самых важных тем в программировании вообще и в Python в частности. Они нужны для того, чтобы разбивать программу на маленькие, удобные части, которые выполняют конкретную задачу.
Функция — это как кулинарный рецепт или инструкция по сборке мебели. В жизни мы постоянно используем «функции», чтобы упростить процесс и не думать каждый раз о деталях.
Например:
Кафе: Бариста каждый раз готовит кофе по одному и тому же рецепту. Можно сказать, что здесь рецептура — это функция. «Вход» — ваши ингредиенты, «выход» — чашка кофе.
Математика: Формула вычисления площади прямоугольника: длина x ширина. Подставляем числа — получаем результат. Так работает функция.
Сборка шкафа: Есть пошаговая инструкция: возьми доски, прикрути ножки — в итоге получается шкаф.
В программировании функции также описывают последовательность действий над входными данными.
Для того чтобы создать функцию, нужно выполнить следующие шаги:
Нужно написать ключевое слово def, имя функции, а затем — круглые скобки и двоеточие.
Далее с новой строки, с отступом (обычно 4 пробела), тело функции — всё, что она делает.
def say_hello():
print("Привет, мир!")
Давайте посмотрим, что мы прописали в коде:
1. def — это слово, которое говорит: «я создаю новую функцию». 2. say_hello — имя вашей функции. Вы можете назвать её, как хотите, главное — чтобы имя отражало смысл. 3. Скобки () — пока пустые, значит функция ничего не «принимает» в качестве дополнительных параметров.
Мы рассмотрим позже, как передавать данные.
4. Двоеточие : говорит Python, что дальше идёт тело функции. 5. Всё, что написано с отступом — это действия, которые выполнятся внутри функции.
Чтобы функция заработала, нужно её вызвать по имени:
say_hello() # на экран выведется: Привет, мир!
Если вы просто объявите функцию, она пока ничего не сделает!
Только при вызове — команда будет выполнена.
Сейчас мы создали функцию, которая работает всегда одинаково. Но функция становится по-настоящему полезной, если умеет работать с разными входными данными и давать разные результаты в зависимости от того, что ей передали. Эти входные данные называются параметрами или аргументами.
К примеру, ниже записана простая функция с одним параметром:
def greet(user_name):
print("Привет,", user_name)
Что же здесь происходит?
user_name — это «переменная», через которую можно передать любое имя при вызове функции.
Когда вызовете функцию, то в скобках укажете значение, которое должно записываться в эту переменную.
Например, мы можем вызвать эту функцию дважды, передавая ей разные значения:
По умолчанию функция просто выполняет свои инструкции, например, печатает на экран. Но часто хочется, чтобы функция возвращала вычисленное значение, с которым можно дальше работать: например, сохранить его в какую-то переменную или в файл, или использовать внутри другой функции.
Для этого используется ключевое слово return:
def square(number):
return number * number
В функции выше переменная number — входной параметр. Благодаря строке return number * number — функция вернет вычисленный результат наружу.
Но она не будет печатать ничего сама! Возврат — это как «отдать результат тому, кто вызвал функцию».
Например:
result = square(5)
print(result) # напечатает: 25
Здесь result получает то, что вернула функция square (5).
Это намного удобнее, чем использовать print () для отображения результата, так как результат можно сохранить в переменной, передавать дальше, использовать в расчетах.
Также return не только возвращает результат, но и завершает выполнение функции на этом месте.
Посмотрим на примере:
def check_positive(n):
if n > 0:
return "Положительное"
print("Это печатается только если нет return выше")
return "Не положительное"
Если n > 0, сработает первый return, и функция закончится — строка ниже не выполнится!
Если условие ложно — срабатывает второй return.
Посмотрим два вызова фунции:
print(check_positive(5)) # Положительное
print(check_positive(-3)) # Не положительное, и напечатает: Это печатается только если нет return выше
Итак, важно запомнить, что после выполнения return функция останавливается и "уходит" — код ниже return не выполняется
Python умеет возвращать из функции несколько значений сразу — через запятую.
Допустим, мы хотим принять на вход два значения, и вернуть тоже два — минимальное и максимальное:
def min_and_max(a, b):
return min(a, b), max(a, b)
После return стоит два значения: min (a, b), max (a, b) — функция сразу «отдаёт два числа».
При вызове обычно их «распаковывают» сразу в несколько переменных:
Напишите функцию is_palindrome (s), которая принимает строку и возвращает True, если строка читается одинаково слева направо и справа налево (палиндром), и False — иначе.