← НАЗАД К КУРСУ Этап 1 · Урок 6 из 8

Урок 1.5 — Python: функции

Функция — это действие. Каждая кнопка в любом приложении — это вызов функции. Нажала "отправить" — вызвалась функция отправки. Нажала "лайк" — вызвалась функция лайка.


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

Ты пишешь код, который выполняет конкретное действие, даёшь ему имя — и теперь можешь вызывать это действие откуда угодно, просто написав имя.

Аналогия: Кнопка "Отправить" в Telegram. Ты не знаешь, что происходит внутри, когда её нажимаешь. Ты просто нажимаешь — и сообщение отправляется. Внутри этой кнопки — функция. Она принимает текст и получателя, делает своё дело и возвращает результат (отправлено / ошибка).


Создаём и вызываем функцию

# def = "я создаю функцию" (define = определить)
# "send_message" = имя действия
# (to, text) = что функция принимает на вход (параметры)

def send_message(to, text):
    print(f"Сообщение для {to}: {text}")

# Вызываем — выполняем действие
send_message("Аня", "Привет!")
# → Сообщение для Аня: Привет!

send_message("Макс", "Когда встреча?")
# → Сообщение для Макс: Когда встреча?

# Одна функция, вызываем сколько угодно раз с разными данными

Параметры — что функция принимает на вход

Параметры — это данные, которые ты передаёшь функции, чтобы она знала, с чем работать.

# Без параметров — функция делает одно и то же каждый раз
def say_hello():
    print("Привет!")

say_hello()   # → Привет!
say_hello()   # → Привет!  (всегда одинаково)


# С параметрами — функция работает с разными данными
def say_hello_to(name):
    print(f"Привет, {name}!")

say_hello_to("Катя")   # → Привет, Катя!
say_hello_to("Дима")    # → Привет, Дима!

Аналогия: Uber. Действие одно — "заказать такси". Но каждый раз ты передаёшь разные параметры: откуда, куда, тип машины. Функция заказать_такси(откуда, куда) — одна, а результат зависит от того, что ты в неё передала.


return — что функция отдаёт обратно

Функция может не просто делать действие, а возвращать результат. Этот результат можно сохранить в переменную и использовать дальше.

# Функция считает скидку и ВОЗВРАЩАЕТ результат
def calculate_discount(price, percent):
    discount = price * percent / 100
    final_price = price - discount
    return final_price
    # return = "верни это значение тому, кто вызвал"

# Вызываем и сохраняем результат в переменную
new_price = calculate_discount(1000, 20)
print(f"Цена со скидкой: {new_price}")
# → Цена со скидкой: 800.0

# Можно вызвать с другими данными
vip_price = calculate_discount(5000, 50)
print(f"VIP цена: {vip_price}")
# → VIP цена: 2500.0

Разница между print и return:

# print — просто показывает текст на экране. Всё.
# return — отдаёт значение обратно в код, чтобы с ним можно было работать дальше.

def with_print(a, b):
    print(a + b)      # показал и забыл

def with_return(a, b):
    return a + b       # вернул значение

with_print(2, 3)       # → 5 (на экране), но сохранить нельзя
result = with_return(2, 3)   # ничего на экране, но result = 5
print(result * 10)     # → 50 (можно использовать дальше)

Функция вызывает функцию

Функции могут вызывать друг друга. Так строятся сложные программы — из простых действий.

# Маленькие действия
def get_greeting(name):
    return f"Привет, {name}!"

def get_time():
    return "10:00"

# Большое действие, использующее маленькие
def send_morning_message(name):
    greeting = get_greeting(name)
    time = get_time()
    print(f"[{time}] {greeting}")

send_morning_message("Катя")
# → [10:00] Привет, Катя!

Аналогия: Заказ в приложении доставки. Когда ты нажимаешь "Заказать", внутри вызываются несколько функций по очереди: проверить_корзину()списать_оплату()найти_курьера()отправить_уведомление(). Каждая делает своё дело, а вместе — полный заказ.


Значения по умолчанию

Можно задать параметру значение "на случай, если не передали":

def create_post(text, visibility="public"):
    print(f"Пост: {text} [{visibility}]")
    # visibility = "public" по умолчанию
    # Если при вызове не указать — будет "public"

create_post("Доброе утро!")
# → Пост: Доброе утро! [public]

create_post("Личная заметка", "private")
# → Пост: Личная заметка [private]

Реальный пример: система уведомлений

def format_notification(notif_type, sender):
    if notif_type == "like":
        return f"Лайк от {sender}"
    elif notif_type == "comment":
        return f"Комментарий от {sender}"
    elif notif_type == "follow":
        return f"Подписка от {sender}"
    else:
        return f"Уведомление от {sender}"

def process_notifications(notifications):
    for notif in notifications:
        message = format_notification(notif["type"], notif["from"])
        print(message)

# Данные
my_notifications = [
    {"type": "like", "from": "Аня"},
    {"type": "comment", "from": "Макс"},
    {"type": "follow", "from": "Дима"},
]

# Одна строка — и всё работает
process_notifications(my_notifications)
# → Лайк от Аня
# → Комментарий от Макс
# → Подписка от Дима

Встроенные функции Python

Python уже имеет готовые функции. Ты их уже использовала:

# print() — вывести на экран
print("Привет")

# len() — узнать длину (количество элементов)
friends = ["Аня", "Макс", "Дима"]
print(len(friends))   # → 3

# type() — узнать тип данных
print(type(42))       # → <class 'int'>

# input() — спросить пользователя (ввод с клавиатуры)
name = input("Как тебя зовут? ")
print(f"Привет, {name}!")

# range() — создать последовательность чисел
for i in range(3):
    print(i)   # → 0, 1, 2

# int(), str(), float() — преобразовать тип
age_text = "25"           # это строка
age_number = int("25")    # теперь число, можно считать
print(age_number + 5)     # → 30

Практика

Создай файл functions.py:

# Калькулятор доставки

def calculate_delivery(distance, is_express):
    base_price = distance * 50
    if is_express:
        total = base_price * 2
    else:
        total = base_price
    return total

def format_order(item, distance, is_express):
    price = calculate_delivery(distance, is_express)
    delivery_type = "экспресс" if is_express else "обычная"
    return f"{item} | {delivery_type} доставка | {distance} км | {price} руб"

# Тестируем
print(format_order("Кроссовки", 5, False))
print(format_order("Телефон", 10, True))
print(format_order("Книга", 2, False))

Запусти: python3 functions.py


Задачки на закрепление

Задача 1: Напиши функцию double(n), которая принимает число и возвращает его удвоенным.

Ответ
def double(n):
    return n * 2

print(double(5))    # → 10
print(double(100))  # → 200

Задача 2: Напиши функцию is_adult(age), которая возвращает True если возраст >= 18, иначе False.

Ответ
def is_adult(age):
    return age >= 18

print(is_adult(25))   # → True
print(is_adult(14))   # → False

Задача 3: Напиши функцию greet(name, time="утро"), которая возвращает приветствие. Если время не передано — по умолчанию "утро".

Ответ
def greet(name, time="утро"):
    return f"Доброе {time}, {name}!"

print(greet("Катя"))            # → Доброе утро, Катя!
print(greet("Катя", "вечер"))   # → Доброе вечер, Катя!

Задача 4: Что выведет этот код и почему?

def add(a, b):
    return a + b

result = add(3, 4)
print(result)
print(add("Привет, ", "мир!"))
Ответ
7
Привет, мир!
Первый вызов: 3 + 4 = 7 (числа складываются). Второй вызов: "Привет, " + "мир!" = "Привет, мир!" (строки склеиваются). Оператор `+` работает по-разному в зависимости от типа данных.

Задача 5: Напиши функцию filter_adults(users), которая принимает список словарей с полями "name" и "age", и выводит только тех, кому >= 18.

Ответ
def filter_adults(users):
    for user in users:
        if user["age"] >= 18:
            print(f"{user['name']} — {user['age']} лет")

people = [
    {"name": "Аня", "age": 22},
    {"name": "Макс", "age": 16},
    {"name": "Дима", "age": 30},
]

filter_adults(people)
# → Аня — 22 лет
# → Дима — 30 лет

Глоссарий

Термин Что значит
Функция Именованный блок кода, который можно вызывать многократно, как кнопка с действием
def Ключевое слово Python для создания (определения) функции
Параметр (аргумент) Входное значение, которое функция принимает при вызове для работы с ним
return Команда, которая возвращает результат из функции обратно в вызывающий код
Вызов функции Использование функции по имени с круглыми скобками, например greet("Аня")
Значение по умолчанию Значение параметра, которое используется, если при вызове его не передали
Область видимости Зона, в которой переменная «живёт» — внутри функции или снаружи
Встроенная функция Функция, которая уже есть в Python и работает без импорта: print(), len(), type()
import Команда для подключения модуля (библиотеки) с дополнительными функциями
Модуль Файл с готовыми функциями, который можно подключить через import

Главное

1. Функция — это именованный блок кода: один раз написал, вызываешь сколько угодно раз.
2. Создаётся через def имя(параметры): — двоеточие и отступ обязательны.
3. Параметры — входные данные функции, аргументы — конкретные значения при вызове.
4. return возвращает результат. Без return функция возвращает None.
5. Значения по умолчанию позволяют вызывать функцию без некоторых аргументов.
6. Переменные внутри функции не видны снаружи — это область видимости.
7. Python имеет десятки встроенных функций: print(), len(), type(), range(), input().
8. import подключает модули — файлы с готовыми функциями для любых задач.
9. Хорошая функция делает одну вещь и имеет понятное имя.

Что дальше?

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

← ПРЕДЫДУЩИЙ СЛЕДУЮЩИЙ →