Введение в функции. Модули
Введение
Функция — это группа инструкций, которая существует внутри программы с целью выполнения определенной задачи
Когда задача большая, её необходимо разбить на несколько приемлимых порций. Для этого используют функции.
Пример: нам нужно рассчитать заработную плату. Для написания программы нам нужно разбить задачу на подзадачи:
Мы видим список инструкций, выполняя которые по очереди мы добьемся цели
Мы можем выделить функцию для решения каждой подзадачи. В нашей программе могли бы быть такие функции:
Это называется модульным подходом и модуляризацией программы
Какие преимущества такого подхода?
Более простой код. Каждую функцию читать легче, чем одну длинную последовательность
Повторное использование кода — уменьшение дублирования в программе
Более простое тестирование
Более быстрая разработка: написанные однажды функции могут быть применены в нескольких программах
Упрощение командной работы
Возврат значения
функции без возврата значения просто выполняют инструкции и ничего не возвращают
функции с возвратом значения что-то возвращают в ту инструкцию, которая её вызвала Примеры:
функция input() возвращает значение — строку
функции int() и float() тоже возвращают значение
функция print() ничего не возвращает, а только выполняет инструкцию печати
Функции без возврата значения
Именование:
имя функции должно отражать то, что она делает
не должно быть пробелов, ключевых слов Python
первый символ — буква или нижнее подчеркивание
как правило в именах функции используются глаголы ("get, take, calculate, print и т.д")
Синтаксис написания функций следующий
Это называется определением функции. Говорят, что функция определена.
Теперь вызовем функцию:
Интерпретатор идет сверху вниз:
Видит определение функции,
Далее видит вызов функции,
Возвращается к определению,
Выполняет блок инструкций
И затем снова возвращается к месту вызова.
Добавим ещё одну функцию в наш пример
Интерактив:
Из каких двух частей состоит определение функции?
Что значит "вызвать функцию"?
Зачем нужны отступы в блоке инструкций?
Разбор:
Подготовим "каркас нашей программы". Затем реализуем каждую функцию.
Напишите программу. "Точкой входа" должна быть функция main().
Области видимости: локальная и глобальная;
Когда переменной внутри функции присваивается значение, создаётся локальная переменная. Инструкции за пределами функции не имеют к ней доступа. Говорят, что переменная доступна в локальной области видимости
Когда переменная создается снаружи функции, она является глобальной и доступна в глобальной области видимости
Практика: напишите любую программу с применением глобальной и локальной переменных.
Передача аргументов в функцию
Аргумент — любая порция данных, передаваемая в функцию, когда она вызывается
Параметр — переменная, которая получает аргумент, переданный в функцию
Закончим программу и разберём каждый её шаг:
Передавать можно несколько аргументов:
Напишите функцию, которая принимает имя и фамилию, и печатает на экран фамилию и имя (именно в этом порядке)
Именованные аргументы
При передаче аргумента в функцию, можно прямо указать имя параметра и его значения. Такой аргумент называется именованным
Можно смешивать именованные и позиционные аргументы
Важно соблюдать порядок — сначала позиционные, потом именованные аргументы
Функции с возвратом значения
Функции могут не просто выполнять действие, но и возвращать результат
Для этого используется ключевое слово return. Значение, указанное после return, отправляется к месту вызова функции
Напишем программу, которая спрашивает пользователя доходы за месяц и расходы за месяц. В результате она должна сообщить баланс по итогам месяца
Возвращение булевых значений
Интерактив:
Как называется функция?
Что функция делает?
Что покажет приведенная ниже инструкция с учетом определения функции?
Модули
Модуль — это файл, который содержит программный код Python. Большие программы легче отлаживать и поддерживать, когда они разделены на модули
Разделение, как правило, проводится по смыслу и логике — в одном модуле мы объединяем функции, выполняющие задачи в одной области
В стандартной библиотеке Python есть большое количество модулей, которые можно подключить при помощи инструкции import. Рассмотрим примеры использования одного из популярных модулей: random
Практика: познакомьтесь с возможностями модуля math. Решите задачу поиска длины гипотенузы, зная длины катетов прямоугольного треугольника при помощи модуля math.
Импорт самописных модулей
Когда мы импортируем один модуль в другой, то выполняются инструкции этого модуля: определяются функции и переменные
Если в модуле вызывается какая-то функция, то при импорте этого модуля, она тоже будет вызвана
Чтобы избежать этого, используется следующая конструкция:
Почему так происходит?
При обработке модуля интерпретатор создаёт переменную __name__
Если модуль импортируется, она равна имени модуля.
Если модуль запускается, она равна
__main__
Таким образом, условие
if __name__ == '__main__':
выполнится только в случае, если модуль запускается непосредственно
Практика:
Создайте два модуля. В каждом модуле определите по одной функции и вызовите их. Запустите каждый модуль — убедитесь, что будет вызвана только функция этого модуля
Теперь импортируйте один модуль в другой. Запустите каждый модуль — понаблюдайте за результатом. Попробуйте добавить обратный импорт. Удалите вызов функции в одном модуле, потом в другом. Запускайте модули на каждом этапе.
Добавьте конструкцию "
if __name__ = '__main__':
" в каждый модуль по очереди, проделайте шаги из пункта 2Обсудите результаты с преподавателем
Итог:
Всегда используйте конструкцию if __name__ == '__main__':
в запускаемом (главном) модуле вашей программы
Интерактив:
Какое ключевое слово игнорируется интерпретатором и может использоваться в качестве местозаполнителя для кода, который будет написан позже?
Как определить функцию? Как её вызвать?
Глобальная или локальная переменная создаётся внутри функции?
Какая инструкция должна быть в функции для возврата значения?
Что такое булева функция?
Зачем разбивать большую программу на модули?
Last updated