"Информатика (базовый и углублённый уровни) (в 2 частях)", Поляков К.Ю., Еремин Е.А.
Функция — именованная часть программы, которую можно вызвать, когда нужно выполнить определённые команды. Она помогает не повторять один и тот же код и делить программу на понятные части. Функции могут получать данные через параметры, выполнять вычисления и возвращать результат командой return. Чтобы уверенно работать с ними, нужно различать определение функции и её вызов, а также понимать, где доступны созданные переменные.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Функция — именованная часть программы, которую можно вызвать из разных мест. Она нужна, чтобы один раз записать набор команд и повторно использовать его, а также разделять большую программу на понятные части. Например, вычисление площади можно оформить отдельно и обращаться к нему для разных значений.
Параметр — имя переменной в определении функции, через которую функция получает данные. Его записывают в круглых скобках заголовка, например r в def площадь(r):. Параметр позволяет одной функции работать с разными входными значениями, не переписывая её команды.
Аргумент — конкретное значение, передаваемое функции при вызове. Если написать площадь(5), число 5 будет аргументом и попадёт в параметр r. Различие простое: параметр задаёт место для данных в определении, а аргумент предоставляет сами данные при использовании функции.
Возвращаемое значение — результат работы функции, передаваемый в место её вызова командой return. Его можно сохранить в переменную или включить в выражение, например использовать результат сложения в дальнейших вычислениях. Это отличает возврат результата от простого показа текста на экране.
Функцию обычно определяют до её вызова, чтобы к моменту обращения программа уже знала её имя. Ключевое слово def сообщает Python, что начинается определение функции; следом пишут имя, круглые скобки и, при необходимости, параметры. Двоеточие завершает заголовок и показывает, что дальше начинается тело функции.
Тело функции — отдельный блок команд, который записывают с отступом относительно заголовка. Отступ нужен Python, чтобы определить, какие команды относятся к функции, а какие — к остальной программе. При чтении определения эти команды не выполняются: они запускаются только тогда, когда встречается вызов функции.
При вызове функции указывают её имя и аргументы в скобках. Python сопоставляет аргументы параметрам по их порядку, поэтому первый аргумент передаётся первому параметру, второй — второму. Если число или порядок аргументов не подходит определению, функция не получит нужные данные и программа сообщит об ошибке.
Команда return передаёт вычисленный результат обратно в место вызова и сразу завершает работу функции. Поэтому команды, записанные после выполненного return, уже не выполняются. Если функция закончилась без return, Python возвращает None; это происходит и тогда, когда return написан без выражения.
Переменные, созданные внутри функции, обычно локальны: область их действия ограничена телом этой функции. Такое ограничение помогает разным частям программы не менять случайно одноимённые данные друг друга. Если значение нужно использовать снаружи, его возвращают через return и присваивают переменной в месте вызова.
| Элемент | Где записывается | Назначение | Пример |
|---|---|---|---|
| Имя функции | В определении и при вызове | Позволяет обратиться к функции | площадь |
| Параметр | В заголовке определения | Обозначает входные данные функции | r |
| Аргумент | В вызове функции | Передаёт конкретное значение параметру | 5 |
| return | В теле функции | Завершает работу и передаёт результат | return r * r |
Сначала выясните, где находится элемент: в заголовке определения или в вызове. Так проще не путать параметр с аргументом. Затем проверьте, что именно делает элемент: задаёт имя, передаёт входные данные или возвращает результат.
Нужно определить функцию, которая сообщает о готовности, а затем вызвать её. Здесь нет входных данных и вычисляемого результата, поэтому достаточно вывести строку внутри тела. Помните: само определение не запускает команды.
Ответ: при запуске программы на экран появится сообщение «Программа готова». Если убрать строку приветствие(), функция останется определённой, но её тело не выполнится. Это показывает разницу между созданием функции и обращением к ней.
Нужно написать функцию для сложения и проверить её на нескольких парах значений. Для универсальности вместо конкретных чисел используем два параметра, например a и b. Результат вернём через return, чтобы его можно было сохранить или использовать в выражении.
Ответ: сумма(2, 3) возвращает 5, а сумма(10, -4) — 6. Функция подходит для разных пар чисел, потому что обрабатывает значения параметров, а не заранее заданные числа. Возвращённый результат можно использовать и без вывода на экран.
Нужно вычислить среднее для нескольких списков, в том числе пустого. Для непустого списка среднее равно сумме элементов, разделённой на их количество. Пустой список нужно обработать отдельно: делить на его длину нельзя, поскольку она равна нулю.
Ответ: для [2, 4] функция возвращает 3.0, для [1, 2, 6] — 3.0, для пустого списка — None. Функция именно возвращает результат, а вывод организован отдельно. Такая проверка граничного случая предотвращает деление на ноль.
Ожидать, что функция выполнится сразу после определения, — значит смешивать создание функции с её запуском. Так думают, потому что команды уже видны в программе, но Python ждёт вызова по имени. Проверьте себя: если после определения нет вызова, добавьте имя функции со скобками.
Считать параметр и аргумент одним и тем же — значит не различать описание входных данных и конкретные данные. Ошибка возникает из-за того, что оба элемента связаны с передачей значения. Проверьте себя: параметр стоит в заголовке, аргумент — в скобках вызова.
Использовать print вместо return, когда результат нужен для вычислений, — значит только показать его на экране, но не передать вызывающему коду. Это путают, потому что обе команды могут сопровождать результат текстом или числом. Проверьте себя: попробуйте присвоить вызов переменной; для дальнейшей работы функция должна возвращать значение.
Обращаться снаружи к локальной переменной — значит использовать имя, доступное только внутри тела функции. Такое имя может быть определено лишь при вызове и не входит в область видимости внешнего кода. Проверьте себя: передавайте нужное значение наружу через return, а не обращайтесь к внутренней переменной напрямую.
Для работы с функциями нужны переменные, типы данных и выражения: с их помощью параметры хранят входные данные, а тело выполняет вычисления. Внутри функции также могут применяться условный оператор и циклы, например для проверки списка или обработки его элементов. Поэтому понимание базовых конструкций помогает писать полезные функции.
Функции структурируют большие программы, позволяют повторно использовать алгоритмы и разделять работу на независимые части. Позже этот подход пригодится при изучении рекурсии, когда функция вызывает себя, а также модулей и библиотек с готовыми функциями. Отдельные функции проще тестировать и отлаживать: можно проверять их на разных входных данных.
Чем параметр отличается от аргумента?
Параметр — имя переменной в определении функции, через которую она получает данные. Аргумент — конкретное значение, передаваемое этой функции при вызове.
Нужно ли определять функцию до её вызова?
В обычной программе на Python функция должна быть определена до того, как программа дойдёт до её вызова. Сначала интерпретатор выполняет определение и создаёт функцию, а затем может выполнить её команды.
Чем return отличается от print?
Команда return передаёт результат из функции в то место, откуда её вызвали, и завершает выполнение функции. Команда print только показывает данные на экране, поэтому её вывод нельзя напрямую подставить в вычисление.
Что вернёт функция, если в ней нет команды return?
Если выполнение функции завершилось без команды return, Python возвращает значение None. Это специальное значение означает отсутствие обычного результата.
Почему переменная внутри функции недоступна снаружи?
Такая переменная обычно локальная: она существует только во время работы функции и доступна в её теле. Поэтому снаружи к ней нельзя обратиться по имени; если результат нужен вызывающему коду, его возвращают через return.
§ 60. Функции