На этом шаге мы рассмотрим задание и использование функций.
В первой части нашего изложения мы интенсивно работали с математическими функциями. Мы относились к ним как к неким машинам, которые получают входные данные, выполняют некую работу и выдают результат. Эти функции действовали самостоятельно, и мы могли их многократно использовать.
Многие языки программирования, включая Python, упрощают создание повторно используемых инструкций. Подобно математическим функциям такие многократно используемые фрагменты кода, если они определены надлежащим образом, могут действовать автономно и обеспечивают создание более короткого элегантного кода.
Почему сокращается объем кода? Потому что вызывать функцию, обращаясь к ее имени, во сто крат лучше, чем каждый раз полностью записывать образующий эту функцию код.
А что означает "определены надлежащим образом"? Это означает, что вы четко определили, какие входные данные ожидает функция и какой тип выходных данных она выдает. Некоторые функции в качестве входных данных принимают только числа, и поэтому им нельзя передавать состоящие из букв слова.
И вновь, вы лучше всего сможете оценить плодотворность идеи использования функций, если мы обратимся к конкретному примеру. Введите и выполните следующий код. # функция, которая принимает два числа в качестве входных данных # и выводит их среднее значение
# функция, которая принимает два числа в качестве входных данных # и выводит их среднее значение def average(x, y): print("первое число - ", х) print("второе число - ", у) a = (x + y) / 2 print("среднее значение равно", a) return a
Обсудим, что делают эти команды. Первые две строки, начинающиеся с символов #, Python игнорирует, но мы используем их в качестве комментария для потенциальных читателей кода. Следующая за ними конструкция
def average(х, у):
Теперь, когда мы объявили Python о своем намерении определить функцию, мы должны сообщить, что именно делает эта функция. Определение функции вводится с отступом, что отражено в приведенном выше коде. В некоторых языках для того, чтобы было понятно, к каким частям программы относятся те или иные фрагменты кода, используется множество всевозможных скобок, но создатели Python осознавали, что обилие скобок затрудняет чтение кода, тогда как отступы позволяют с первого взгляда получить представление о его структуре. В отношении целесообразности такого подхода мнения разделились, поскольку люди часто попадают в ловушку, забывая о важности отступов, но нам данная идея очень нравится! Это одна из самых полезных идей, зародившихся в чересчур заумном мире компьютерного программирования.
Понять смысл кода в определении функции average(х, у) вам будет совсем несложно, поскольку в нем используется все то, с чем вы уже сталкивались. Этот код выводит числа, передаваемые функции при ее вызове. Для вычисления среднего значения выводить аргументы вовсе не обязательно, но мы делаем это для того, чтобы было совершенно понятно, что происходит внутри функции. В следующей инструкции вычисляется величина (х + у) / 2, и полученное значение присваивается переменной а. Мы выводим среднее значение исключительно для контроля того, что происходит в коде. Последняя инструкция - return а. Она завершает определение функции и сообщает Python, что именно должна вернуть функция в качестве результата, подобно машинам, которые мы ранее обсуждали.
Запустив этот код, вы увидите, что ничего не произошло. Никакие числа не выведены. Дело в том, что мы всего лишь определили функцию, но пока что не вызвали ее. На самом деле Python зарегистрировал функцию и будет держать ее наготове до тех пор, пока мы не захотим ее использовать.
Введите в следующей ячейке average(2, 4), чтобы активизировать функцию для значений 2 и 4. Кстати, в мире компьютерного программирования это называется вызовом функции. В соответствии с нашими ожиданиями данная функция выведет два входных значения и их вычисленное среднее. Кроме того, вы увидите ответ, выведенный отдельно, поскольку вызовы функций в интерактивных сеансах Python сопровождаются последующим выводом возвращаемого ими значения. Ниже показано определение функции, а также результаты ее вызова с помощью инструкции average(2, 4) и инструкции average(200, 301) с большими значениями. Поэкспериментируйте самостоятельно, вызывая функцию с различными входными значениями.
Рис.1. Функция и результат ее выполнения
Немного передохнем и поздравим себя. Мы определили повторно используемую функцию - один из наиболее важных и мощных элементов как математики, так и компьютерного программирования.
Мы будем применять повторно используемые функции при написании кода собственной нейронной сети. Например, имеет смысл создать повторно используемую функцию, которая реализовала бы вычисления с помощью сигмоиды, чтобы ее можно было вызывать много раз.
На следующем шаге мы поговорим о массивах.