Возвращение значений из функций с return
Что делает return и зачем он нужен? 🔄
Функция в Python — это не просто набор команд, а машина для преобразования данных. Ключевой инструмент здесь — return. Он делает две важные вещи:
- Возвращает результат работы функции (может быть любым объектом: число, список, строка и т.д.)
- Немедленно завершает выполнение функции
Пример без return:
def greet(name):
print(f"Привет, {name}!")
result = greet("Анна") # Выведет "Привет, Анна!"
print(result) # Выведет None, потому что функция ничего не возвращает
А теперь с return:
def create_greeting(name):
return f"Привет, {name}!"
message = create_greeting("Анна") # Ничего не выводится
print(message) # Выведет "Привет, Анна!"
Как работает return под капотом 🛠️
Когда интерпретатор встречает return:
- Вычисляется выражение после
return - Результат сохраняется в памяти
- Функция сразу завершается (даже если после
returnесть код) - Значение передаётся туда, где функцию вызвали
Пример с преждевременным завершением:
def check_age(age):
if age < 0:
return "Ошибка: возраст не может быть отрицательным!"
if age < 18:
return "Доступ запрещён"
return "Доступ разрешён"
print(check_age(25)) # "Доступ разрешён"
print(check_age(-5)) # "Ошибка: возраст не может быть отрицательным!"
Возвращаем всё: от простого к сложному 🎛️
Функция может возвращать любые типы данных:
1. Простые значения:
def square(n):
return n * n
print(square(5)) # 25
2. Коллекции:
def create_stats(name, age):
return {
"name": name,
"age": age,
"is_adult": age >= 18
}
print(create_stats("Мария", 20)) # {'name': 'Мария', 'age': 20, 'is_adult': True}
3. Даже другие функции! (это уже продвинутый уровень):
def create_multiplier(n):
def multiplier(x):
return x * n
return multiplier
double = create_multiplier(2)
print(double(5)) # 10
Особые случаи и лайфхаки 💡
1. Возврат нескольких значений через кортеж:
def split_email(email):
username, domain = email.split("@")
return username, domain # На самом деле возвращается кортеж
user, domain = split_email("test@example.com")
print(user) # "test"
2. Пустой return — это None:
def do_nothing():
return # То же самое, что return None
print(do_nothing()) # None
3. Возврат vs вывод (print): — частая ошибка новичков!
# Плохо: функция только выводит результат, но не возвращает
def bad_calc(a, b):
print(a + b)
# Хорошо: функция возвращает результат
def good_calc(a, b):
return a + b
Практика: пишем полезные функции 🏋️♂️
Задача 1: Функция для форматирования времени
def format_time(seconds):
hours = seconds // 3600
minutes = (seconds % 3600) // 60
seconds = seconds % 60
return f"{hours:02d}:{minutes:02d}:{seconds:02d}"
print(format_time(3678)) # "01:01:18"
Задача 2: Валидатор пароля (возвращает True/False + сообщение)
def validate_password(password):
if len(password) < 8:
return False, "Пароль слишком короткий"
if not any(c.isupper() for c in password):
return False, "Добавьте хотя бы одну заглавную букву"
return True, "Пароль надёжный"
is_valid, message = validate_password("Qwerty123")
print(is_valid, message) # True "Пароль надёжный"
Когда использовать return vs print? 🤔
✅ Используйте return когда:
- Результат нужно сохранить в переменной
- Значение будет использоваться в других вычислениях
- Пишете библиотечные функции
✅ Используйте print когда:
- Нужно просто вывести информацию пользователю
- Дебажите код (временные выводы)
- Создаёте чисто интерактивные скрипты
Как говорит Данила Бежин в своих видео: "Функция должна делать что-то одно: либо вычислять, либо выводить. Совмещать — плохой тон" (https://www.youtube.com/@DanilaBezhin).
Главное запомнить 🧠
return— это выход из функции с результатом- После
returnкод не выполняется - Можно возвращать любые объекты (даже функции!)
- Возвращаемое значение можно присвоить переменной
returnбез значения ==return None- Не путать вывод (
print) с возвратом (return)
Теперь ты готов создавать функции, которые не просто выполняют код, а возвращают полезные результаты! 🎉