Функции в Python

Чтобы не копировать один и тот же блок кода в нескольких местах программы, его описывают как функцию и потом вызывают по имени. Функция принимает входные значения, что-то с ними делает и обычно возвращает результат.

Что такое функции?

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

Удобнее всего представлять функцию как «чёрный ящик»: на вход подаём аргументы, внутри что-то происходит, наружу возвращается результат.

Функция как чёрный ящик: на вход аргументы 5 и 3, внутри def add(a, b): return a + b, на выходе 8

Создание и вызов функций

Базовый синтаксис

Функция в Python создаётся с помощью ключевого слова def:

Python 3.13
# Простой пример функции
def greet():
    print("Привет, мир!")

# Вызов функции
greet()
Привет, мир!

Здесь def объявляет функцию, greet — её имя, в скобках пишутся параметры (тут их нет), после двоеточия идёт тело функции с отступом.

Функции с параметрами

Функции могут принимать параметры — значения, которые передаются в функцию при её вызове:

Python 3.13
# Функция с параметрами
def greet(name):
    print(f"Привет, {name}!")

# Вызов функции с аргументом
greet("Анна")
Привет, Анна!
greet("Петр")
Привет, Петр!

Возвращаемые значения

Функции могут возвращать результат своей работы с помощью оператора return:

Python 3.13
# Функция с возвращаемым значением
def add(a, b):
    return a + b

# Использование результата функции
result = add(5, 3)
print(f"5 + 3 = {result}")
5 + 3 = 8

return сразу завершает функцию: код после него не выполнится. Это удобно, чтобы выйти из функции пораньше при особых условиях:

Python 3.13
def describe(value):
    if value < 0:
        return "отрицательное"
    return "неотрицательное"

print(describe(-5))
отрицательное
print(describe(10))
неотрицательное

Если в функции нет return, она всё равно возвращает значение — None. Это нормально для функций, которые ничего не вычисляют, а просто что-то делают (например, печатают на экран):

Python 3.13
def say_hi():
    print("Привет!")

result = say_hi()
print(result)
Привет!
None

Параметры функций

Позиционные и именованные параметры

Python поддерживает два способа передачи аргументов в функцию:

Python 3.13
# Функция с несколькими параметрами
def describe_pet(animal_type, pet_name):
    print(f"У меня есть {animal_type} по имени {pet_name}.")

# Позиционные аргументы
describe_pet("собака", "Шарик")
У меня есть собака по имени Шарик.
# Именованные аргументы
describe_pet(pet_name="Мурка", animal_type="кошка")
У меня есть кошка по имени Мурка.

Параметры по умолчанию

Вы можете задать значения по умолчанию для параметров:

Python 3.13
# Функция с параметрами по умолчанию
def describe_pet(pet_name, animal_type="собака"):
    print(f"У меня есть {animal_type} по имени {pet_name}.")

# Использование значения по умолчанию
describe_pet("Шарик")
У меня есть собака по имени Шарик.
# Переопределение значения по умолчанию
describe_pet("Мурка", "кошка")
У меня есть кошка по имени Мурка.

Произвольное количество аргументов

Иногда вы не знаете заранее, сколько аргументов будет передано в функцию. На помощь приходят специальные параметры: звёздочка перед именем (*toppings) собирает все позиционные аргументы вместе, а две звёздочки (**user_info) — все именованные.

Python 3.13
# Произвольное количество позиционных аргументов
def make_pizza(*toppings):
    print("Начинки:", toppings)

make_pizza("пепперони")
Начинки: ('пепперони',)
make_pizza("грибы", "зеленый перец", "дополнительный сыр")
Начинки: ('грибы', 'зеленый перец', 'дополнительный сыр')
# Произвольное количество именованных аргументов
def build_profile(**user_info):
    print(user_info)

build_profile(name="Анна", location="Москва", field="программирование")
{'name': 'Анна', 'location': 'Москва', 'field': 'программирование'}

Все переданные значения Python собирает в одну структуру: позиционные — в набор значений, именованные — в пары «имя-значение». Что это за структуры и как перебрать их по одному, разберём в главах про коллекции и циклы.

Проверка понимания

Давайте проверим, насколько хорошо вы усвоили тему функций:

Что выведет следующий код?

Python 3.13
def mystery(x, y=2):
    return x * y

result = mystery(3)
print(result)