Python: Возврат значений
В этом уроке мы научимся писать функции, которые возвращают значения. Такие функции не просто что-то делают, а отвечают на вопрос и отдают результат своей работы — как будто говорят: «Вот, держи, я посчитала».
Например, функция может вернуть строку с обработанным текстом или число, вычисленное по формуле. Возвращённое значение можно использовать дальше — сохранить в переменную, передать в другую функцию или вывести на экран.
Чтобы функция отдала результат, в ней используется специальное ключевое слово — return
. Оно завершает выполнение функции и указывает, что именно нужно вернуть.
Вот пример функции, которая делает текст заглавным:
def shout(name):
return name.upper()
Мы вызываем shout()
, передаём туда имя, и получаем строку в верхнем регистре. Эта строка — результат функции:
result = shout('hexlet')
print(result) # => HEXLET
result2 = shout('code-basics')
print(result2) # => CODE-BASICS
В отличие от print()
, return
ничего не печатает. Оно просто возвращает значение. Что с ним делать — решает вызывающий код.
Как это работает:
При вызове функции shout('hexlet')
сначала выполняется выражение name.upper()
. Оно возвращает строку 'HEXLET'
. Затем return
отдаёт это значение наружу — туда, откуда была вызвана функция. В нашем случае это значение сохраняется в переменную result
, а потом выводится на экран через print()
.
Возврат вычисленного выражения
Функции не обязаны просто возвращать параметр. Обычно в return
указывается выражение, которое сначала вычисляется, а потом результат передаётся наружу.
def full_name(first, last):
return first.capitalize() + ' ' + last.capitalize()
В этом примере мы собираем полное имя из имени и фамилии. Сначала вызываются методы capitalize()
, затем строки объединяются через +
, и уже готовая строка возвращается.
name = full_name('Aria', 'Stark')
print(name) # => Aria Stark
Здесь в строке return first.capitalize() + ' ' + last.capitalize()
сначала выполняются оба вызова методов, потом прибавляется пробел, и только затем результат передаётся как возвращаемое значение.
Многострочные функции
Иногда в теле функции нужно сделать несколько шагов, прежде чем получить результат. В таких случаях пишут несколько строк кода, а в конце используют return
, чтобы вернуть итоговое значение.
Например, напишем функцию, которая форматирует имя: удаляет пробелы по краям и переводит все буквы в верхний регистр.
def format_name(name):
clean = name.strip()
uppercased = clean.upper()
return uppercased
Здесь по шагам:
- Убираем пробелы с помощью метода
strip()
- Переводим в верхний регистр с помощью
upper()
- Возвращаем итоговое значение
Пример использования:
print(format_name(' hexlet ')) # => HEXLET
Код после return
Когда Python доходит до оператора return
, выполнение функции останавливается. Всё, что написано после него внутри функции, не будет выполнено:
def example():
return 'готово'
print('этот код никогда не выполнится')
Поэтому return
всегда пишут в конце логики. Однако таких концов внутри функции может быть много, подробнее мы этого коснемся, когда доберемся до условных выражений
Задание
Допишите функцию truncate()
, которая обрезает переданную строку до указанного количества символов, добавляет в конце троеточие и возвращает получившуюся строку. Подобная логика часто используется на сайтах, чтобы отобразить длинный текст в сокращенном виде.
Функция принимает два параметра:
- Строка, которую нужно обрезать
- Число символов, которые нужно оставить
Пример того, как должна работать написанная вами функция:
# Передаём текст напрямую
# Обрезаем текст, оставляя 2 символа
truncate('hexlet', 2) # 'he...'
# Через переменную
text = 'it works!'
# Обрезаем текст, оставляя 4 символа
truncate(text, 4) # 'it w...'
Выполнить задание можно различными способами, подскажем лишь один из них. Для решения этим способом вам понадобится взять подстроку из строки, переданной первым параметром в функцию. Используйте для этого срезы строк. Подумайте, исходя из задания, с какого индекса и по какой вам надо извлечь подстроку?
word = 'welcome!'
index = 3
word[:index] # wel
Полезное
Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект
Если вы зашли в тупик, то самое время поговорить с нашим асситентом Тота во вкладке "ИИ-помощник":
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи. В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в обратной связи нашего сообщества
Ваше упражнение проверяется по этим тестам
import index
def test():
assert index.truncate("hexlet", 2) == "he..."
assert index.truncate("it works!", 4) == "it w..."
Решение учителя откроется через:
20:00
