Сегодня разберёмся, что вообще такое функции в программировании, зачем они нужны и как ими пользоваться. Дело полезное, потому что в любой программе, независимо от языка, это важный и мощный инструмент, который сильно облегчает жизнь. А ещё это пригождается всем: и новичкам на небольших проектах, и сеньорам, которые пишут сложный софт.
Статья может вызвать желание перекусить, мы предупредили :)
Что такое функция в программировании
Если взять формальное определение функции, оно будет звучать примерно так:
функция — это изолированный блок кода, который решает одну задачу.
Ключевые слова здесь «изолированный» и «одну задачу» — это важно, к этому мы ещё вернёмся.
Теперь подключим силу аналогий — объясним всё на бутербродах.
Полезный блок со скидкой
Если вам интересно разбираться со смартфонами, компьютерами и прочими гаджетами и вы хотите научиться создавать софт под них с нуля или тестировать то, что сделали другие, — держите промокод Практикума на любой платный курс: KOD (можно просто на него нажать). Он даст скидку при покупке и позволит сэкономить на обучении.
Бесплатные курсы в Практикуме тоже есть — по всем специальностям и направлениям, начать можно в любой момент, карту привязывать не нужно, если что.
Представим, что нам нужно сделать три бутерброда с сыром. Алгоритмически это выглядит примерно так:
- Взять хлеб.
- Отрезать ломтик.
- Намазать его маслом.
- Взять сыр.
- Пока бутерброд весь не покроется сыром — отрезать от него ломтик и класть сверху на масло ← первый бутерброд готов
- Взять хлеб.
- Отрезать ломтик.
- Намазать его маслом.
- Взять сыр.
- Пока бутерброд весь не покроется сыром — отрезать от него ломтик и класть сверху на масло ← второй бутерброд готов
- Взять хлеб.
- Отрезать ломтик.
- Намазать его маслом.
- Взять сыр.
- Пока бутерброд весь не покроется сыром — отрезать от него ломтик и класть сверху на масло ← третий бутерброд готов
- Убрать хлеб.
- Убрать сыр.
- Убрать масло.
Теперь сделаем так: выделим сам процесс приготовления бутерброда во что-то отдельное, например:
Сделать бутерброд:
- Взять хлеб.
- Отрезать ломтик.
- Намазать его маслом.
- Взять сыр.
- Пока бутерброд весь не покроется сыром — отрезать от него ломтик и класть сверху на масло.
Тут нет ничего про то, что хлеб и сыр должен быть в принципе к началу приготовления — это мы ещё учтём. Но теперь мы можем использовать этот блок под одним названием для нашего процесса; смотрите, что получилось:
- Сделать бутерброд.
- Сделать бутерброд.
- Сделать бутерброд.
- Убрать хлеб.
- Убрать сыр.
- Убрать масло.
Шесть строк на функцию создания бутерброда и шесть — на общий код. Уже в полтора раза меньше. А если добавить цикл — то и того меньше:
- Повторить 3 раза: сделать бутерброд.
- Убрать хлеб.
- Убрать сыр.
- Убрать масло.
Если что, вот как может выглядеть наша функция в реальном python-коде:
def make_sandwich():
print("🍞 Беру хлеб")
print("🍞 Отрезаю ломтик")
print("🧈 Мажу масло")
print("🧀 Кладу сыр, пока не покрою весь ломтик")
print("✅ Бутерброд готов!")
# Используем нашу функцию
make_sandwich()
Когда мы запускаем этот код, компьютер выполняет все команды внутри функции по порядку. Красота в том, что теперь мы можем вызывать make_sandwich() сколько угодно раз — и каждый раз получать свежий бутерброд, не переписывая одни и те же команды снова и снова.
Функции с аргументами — универсальная штука
В нашем примере функция получилась очень узкозаточенной — она делает только бутики с сыром. Но кайф в том, что мы можем передать в функцию то, с чем она будет работать внутри себя. Это называется аргументами функции.
Смотрите, бутерброд можно сделать на хлебе, а можно на хрустящих хлебцах. Можно намазать маслом, а можно — творожной пастой (или вообще ничем не мазать). И сверху можно класть что угодно.
Изменим нашу функцию, чтобы она стала универсальной:
Сделать бутерброд(основа, середина, топинг):
- Взять
[основа]. - Если
[основа]— это хлеб, то отрезать ломтик. - Если есть
[середина], то намазать на[основа] [середина]. - Взять
[топинг]. - Если есть топинг, то, пока
[основа]весь не покроется[топинг], — отрезать от[топинг]ломтик и класть сверху на[середина].
Теперь мы можем сделать три разных бутерброда с помощью одной и той же функции, просто передавая ей разные аргументы:
- Взять хлеб.
- Взять хлебцы.
- Взять масло.
- Взять творожную пасту.
- Взять сыр.
- Взять колбасу.
- Сделать бутерброд (хлеб, масло, сыр).
- Сделать бутерброд (хлебец, творожная паста, ничего).
- Сделать бутерброд(хлеб, ничего, колбаса).
Получается, что в программировании можно сделать так, что одна функция будет одинаково решать похожие задачи, только с разными вводными. Разработчику не придётся писать отдельный код для тех задач, которые выполняются одинаково, просто с другими данными.
В чём сила функций
Избавляемся от повторений
Представьте, что бутерброд нужно готовить 10 раз в день. Без функций пришлось бы 10 раз писать одни и те же команды. С функцией — просто 10 раз вызвать одну и ту же функцию, только с разными аргументами при желании.
В программировании это называется принципом DRY (Don’t Repeat Yourself) — «не повторяйся». Чем меньше повторяющегося кода, тем легче его поддерживать и изменять.
Понятный код
Читая код с функциями, вы видите не сотни строк непонятных команд, а понятные действия, например:
создать_пользователя()
отправить_приветственное_письмо()
добавить_в_рассылку()
Здесь код начинает сам себя документировать. Даже не зная, как именно работает каждая функция, можно понять общую логику программы.
Упрощается исправление ошибок
Допустим, вы поняли, что бутерброд вкуснее, если хлеб сначала поджарить. Без функций пришлось бы искать ВСЕ места в коде, где вы готовили бутерброды, и менять их. С функцией — меняете всего в одном месте:
def make_sandwich():
print("🍞 Беру хлеб")
print("🍞 Отрезаю ломтик")
print("🍞 Поджариваю хлеб") # ← изменили всего одну строку, которая повлияла на всё
print("🧈 Мажу масло")
print("🧀 Кладу сыр, пока не покрою весь ломтик")
print("✅ Бутерброд готов!")
Функции, которые возвращают результат своей работы
До сих пор наши функции только просто готовили бутерброд (или печатали сообщения). Но часто функция должна не просто что-то сделать, но и вернуть результат — отдать его туда, откуда её вызвали.
Представьте, что вы попросили товарища сходить за кофе. Он ушёл и… не вернулся. Вы не знаете, купил он кофе или нет, случилось с ним, может, что-то, и вообще непонятно, что делать дальше.
В программировании возврат значения происходит через оператор return:
# объявляем функцию
def Посчитать_площадь_квадрата(сторона):
площадь = сторона сторона
return площадь # Возвращаем результат
# Используем результат
результат = Посчитать_площадь_квадрата(5)
print(f"Площадь квадрата: {результат}") # Напечатает "Площадь квадрата: 25"
# Или сразу используем в другом выражении
общая_площадь = Посчитать_площадь_квадрата(5) + Посчитать_площадь_квадрата(3)
Это полезно, когда функция должна не просто что-то сделать глобально, а что-то, например, посчитать и отдать результат именно туда, где он нужен — в переменную или в другую функцию.
Пример: пишем реальную функцию на Python
Давайте создадим полезную функцию, которая проверяет, является ли число чётным. Напишем её на Python:
def is_even(number):
# если число делится на 2 без остатка
if number % 2 == 0:
# возвращаем истину
return True
else:
# иначе возвращаем ложь
return False
# Проверяем работу функции
print(is_even(4)) # Напечатает True
print(is_even(7)) # Напечатает False
print(is_even(0)) # Напечатает True
Более опытный программист напишет её короче:
def is_even(number):
# сразу проверяем, равен ли остаток нулю от деления на два
return number % 2 == 0
Обе функции работают одинаково, но вторая — короче и понятнее.
Теперь мы можем использовать нашу функцию в других местах:
# Проверим все числа от 1 до 10
for i in range(1, 11):
# если результат выполнения функции будет истинным
if is_even(i):
print(f"{i} — чётное")
# и если результат выполнения функции — ложный
else:
print(f"{i} — нечётное")
Что дальше
В следующей части ликбеза расскажем о вложенных функциях и аргументах по умолчанию — такое тоже часто встречается в разработке. Подпишитесь, чтобы не пропустить продолжение.
Вам слово
Приходите к нам в соцсети поделиться своим мнением о статье и почитать, что пишут другие. А ещё там выходит дополнительный контент, которого нет на сайте — шпаргалки, опросы и разная дурка. В общем, вот тележка, вот ВК — велком!

