Основы программирования на Python
Функции в программировании можно представить как изолированный блок кода, обращение к которому в процессе выполнения программы может быть многократным. Зачем нужны такие блоки инструкций? В первую очередь, чтобы сократить объем исходного кода: рационально вынести часто повторяющиеся выражения в отдельный блок и, затем, по мере надобности, обращаться к нему.
Представим себе следующую ситуацию. Требуется написать скрипт, который при выполнении должен три раза запрашивать у пользователя разные данные, но выполнять с ними одни и те же действия.
a = int(input('Введите первое число: ')) b = int(input('Введите второе число: ')) if a > b: print(a-b) else: print(b-a) c = int(input('Введите первое число: ')) d = int(input('Введите второе число: ')) if c > d: print(c-d) else: print(d-c) e = int(input('Введите первое число: ')) f = int(input('Введите второе число: ')) if e > f: print(e-f) else: print(f-e)
Данная программа находит модуль разницы двух чисел. Очевидно, что такая запись исходного кода не рациональна: получаются три почти одинаковых блока кода. Почему бы не использовать цикл while для организации повторения?
i = 0 while i < 3: a = int(input('Введите первое число: ')) b = int(input('Введите второе число: ')) if a > b: print(a-b) else: print(b-a) i = i + 1
Однако, в этом случае есть один нюанс. Вводимые пользователем данные всегда связываются с переменными a и b. При каждом витке цикла прежние данные утрачиваются. Что же делать, если все шесть чисел, введенных пользователем надо сохранить для дальнейшего использования в программе? Рассмотрим решение этой задачи с использованием функции.
def diff(): m = int(input('Введите первое число: ')) n = int(input('Введите второе число: ')) if m > n: print(m-n) else: print(n-m) return m,n a,b = diff() c,d = diff() e,f = diff()
После функции идет, так называемая, основная ветка программы, в которой переменным попарно присваивается результат выполнения вызываемой функции. В иных ситуациях, когда функция не возвращает значений, ее вызов не связывается с переменной.
Выражения тела функции выполняются лишь тогда, когда она вызывается в основной ветке программы. Так, например, если функция присутствует в исходном коде, но нигде не вызывается в нем, то содержащиеся в ней инструкции не будут выполнены ни разу.