Видеокурс выложен на сайте Altube.ru вместо Youtube и плеер Altube не поддерживает субтитры. Прошу решить вопрос о предоставлении русских субтитров в этом англоязычном видеокурсе. |
Функции
8.10. Плодотворные (fruitful) функции и void-функции
Некоторые из функций, которые мы используем, такие, как математические функции, возвращают результаты (приносят плоды); за неимением лучшего названия, я называю их плодотворными функциями (fruitful functions). Другие функции, подобные print_twice, выполняют некоторые действия, но не возвращают значение. Они называются void-функциями.
Когда вы вызываете плодотворную функцию, вы почти всегда хотите сделать что-то с результатом, например, вы можете присвоить его переменной или использовать его как часть выражения:
x = math.cos(radians) golden = (math.sqrt(5) + 1) / 2
Когда вы вызываете функцию в интерактивном режиме, Python отображает результат:
>>> math.sqrt(5) 2.2360679774997898
Но если вы вызываете плодотворную функцию в скрипте и не сохраняете результат выполнения функции в переменной, то возвращаемое значение растворится в тумане!
math.sqrt(5)
Этот скрипт вычисляет квадратный корень из 5, но так как он не сохраняет результат в переменной и не отображает результат, то это не очень полезно.
Void-функции могут отображать что-то на экране или производить другие действия, но они не возвращают значение. Если вы попытаетесь присвоить результат выполнения такой функции переменной, то получите специальное значение, называемое None.
>>> result = print_twice('Bing') Bing Bing >>> print result None
Значение None – это не тоже самое, что строка ‘None’. Это специальное значение, которое имеет собственный тип:
>>> print type(None) <type 'NoneType'>
Для возврата результата из функции, мы используем инструкцию return в функции. Для примера, мы можем создать простую функцию с именем addtwo, которая складывает два числа и возвращает результат.
def addtwo(a, b): added = a + b return added x = addtwo(3, 5) print x
Когда скрипт выполнится, инструкция print напечатает "8". Внутри функции параметры a и b, в момент выполнения, будут содержать значения 3 и 5 соответственно. Функция подсчитывает сумму двух чисел и помещает ее в локальную переменную added. Затем с помощью инструкции return результат вычисления возвращается в вызываемый код, как результат выполнения функции. Далее результат присваивается переменной x и выводится на экран.
8.11. Зачем нужны функции?
Есть несколько причин, на основании которых программу стоит разбивать на функции.
-
Создание новой функции предоставляет вам возможность присвоить имя группе инструкций. Это позволит упростить чтение, понимание и отладку программы.
-
Функции позволяют сократить код программы, благодаря ликвидации повторяющихся участков кода. Позже, вы сможете вносить коррективы только в одном месте.
-
Разбиение длинной программы на функции позволяет одновременно отлаживать отдельные части, а затем собрать их в единое целое.
-
Хорошо спроектированная функция может использоваться во множестве программ. Однажды написав и отладив функцию, вы можете использовать ее множество раз.
8.13. Словарь
Алгоритм (algorithm): обобщенный подход к решению категории проблем.
Аргумент (argument): значение, передаваемое функции, в момент ее вызова. Это значение присваивается соответствующему параметру в функции.
Тело функции (body): последовательность инструкций внутри определения функции.
Детерминистический (deterministic): относится к программе, которая выполняет одинаковые действия при одинаковых входных значениях.
Точечная нотация (dot notation): синтаксис для вызова функции из другого модуля.
Поток исполнения (flow of execution): порядок, в котором выполняются инструкции во время работы программы.
Плодотворная функция (fruitful function): функция, которая возвращает значение.
Функция (function): это именованная последовательность инструкций, которая выполняет некоторые полезные действия. Функции могут иметь или не иметь аргументы, могут возвращать или не возвращать результат.
Вызов функции (function call): инструкция, которая выполняет функцию. Она содержит имя функции и список аргументов.
Определение функции (function definition): инструкция, которая создает новую функцию; задает имя функции, параметры и инструкции для выполнения.
Функциональный объект (function object): значение, созданное определением функции. Имя функции является переменной, которая ссылается на функциональный объект.
Заголовок функции (header): первая строка в определении функции.
Инструкция импорта (import statement): инструкция, которая читает файл модуля и создает модульный объект.
Модульный объект (module object): значение, которое создает инструкция импорта, для предоставления доступа к данным и коду, определенном в модуле.
Параметр (parameter): имя, используемое внутри функции, которое ссылается на передающееся в качестве аргумента значение.
Псевдослучайный (pseudorandom): относится к последовательности чисел, которые похожи на случайные, но генерируются детерминированной программой.
Возвращаемое значение (return value): результат выполнения функции.
Void-функция (void function): функция, которая не возвращает результирующего значения.