Бесплатный курс по python. Зарегистрируйтесь для отслеживания прогресса →

Python: Возврат значений

В модуле «Вызов функций» мы в основном работали с функциями, которые выводят результат на экран, а не возвращают его. Честно говоря, вывод на экран — фактически обучающий элемент. В реальном коде на экран никто ничего не выводит (за исключением утилит командной строки). Функции возвращают данные, которые потребляются другими функциями.

Научиться писать функции, которые возвращают информацию — первый шаг на пути к построению по-настоящему полезных программ.

Начнем с тривиального примера: создадим и вызовем функцию, которая принимает два числа и возвращает первое число минус второе. Назовём её sub, от англ. "subtract" — «вычесть»:

def sub(a, b):
    result = a - b
    return result

print(sub(10, 7))
3

Обратите внимание: мы знаем, что вызов функции — выражение, поэтому мы передали вызов одной функции в вызов другой функции — print(sub(10, 7)).

Возврат задаётся специальной инструкцией return. Cправа от return помещается выражение. Любое выражение. То есть, мы можем делать вычисления сразу после return без создания переменной result:

def sub(a, b):
    # Сначала вычисляется выражение справа от `return`
    # затем получившееся значение возвращается
    return a - b

print(sub(2018, 1975))
43

После исполнения функции возвращенный результат «встаёт» на место вызова:


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

Посмотрите на эту функцию:

def foo():
    return 7
    return 10

print(foo())

Что выведется на экран?

Правильный ответ: 7. Функция всегда будет возвращать только число 7, так как интерпретатор, наткнувшись на первый return, остановит выполнение функции. Строчка кода return 10 никогда не выполнится.

Задание

Реализуйте функцию get_current_year(), которая возвращает наружу текущий год:

get_current_year()  # 2022

Алгоритм:

  • Получить текущую дату с помощью метода date.today(). Этот метод возвращает объект типа datetime.date. В реальности у этого объекта есть свойтво year, в котором хранится год. Но здесь мы хотим потренироваться.
  • Преобразовать дату в строку. Формат строки: yyyy-mm-dd, например, 2021-11-05
  • Извлечь из неё год
  • Преобразовать год из строки в число

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

string[i:j]
  • i — порядковый номер (индекс) символа, с которого начинается "обрезка"
  • j — индекс символа, перед которым отрезок должен закончиться:
print('Hexlet'[0:3])  # => 'Hex'

# берём отрезок, начиная с символа с индексом 2
# и заканчивая символом с индексом 4
# (т.е. "перед символом с индексом 5")
print('python'[2:5])  # => 'tho'

Вам не нужно вызывать свою функцию, только определить её.


Нашли ошибку? Есть что добавить? Пулреквесты приветствуются https://github.com/hexlet-basics
Если вы столкнулись с трудностями и не знаете, что делать, задайте вопрос в нашем большом и дружном сообществе