"Информатика", Поляков К.Ю., Еремин Е.А.
Функция — именованный блок команд, который выполняет отдельную задачу. Его можно вызвать из разных частей программы, поэтому повторяющиеся действия не приходится записывать заново. Функции принимают данные через параметры, а при вызове получают конкретные аргументы. Если нужно передать результат обратно в программу, используют return. Понимание функций помогает делать код понятнее, делить большие задачи на части и повторно использовать готовые решения.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Функция — именованная часть программы, которую можно вызвать из разных мест. Она объединяет команды, выполняющие одну задачу. Если одинаковое действие нужно в нескольких местах, достаточно описать его один раз и вызывать по имени: так меньше повторов и проще исправлять программу.
Параметр функции — переменная, указанная в заголовке функции и предназначенная для получения данных. Например, в записи def квадрат(x): параметр — x. Он нужен, чтобы функция могла работать не с одним заранее заданным числом, а с разными данными.
Аргумент — конкретное значение, которое передают функции при вызове. В вызове квадрат(5) аргументом является число 5, и оно связывается с параметром x. Благодаря этому одна и та же функция может выполнять вычисление для разных значений.
Возвращаемое значение — результат работы функции, который передаётся обратно в место вызова с помощью return. Например, функция может вычислить квадрат числа и вернуть его, чтобы основная программа могла сохранить результат, вывести его или использовать в другом вычислении.
Определение функции начинается с ключевого слова def, затем записывают имя, параметры в круглых скобках и двоеточие. Например: def удвоить(x):. Команды, которые относятся к функции, размещают ниже с отступом. Отступ показывает Python, что эти команды образуют тело функции, а не продолжают основную программу.
Определение функции само по себе не выполняет команды из её тела: оно лишь сообщает программе, какие действия связаны с указанным именем. Это удобно, потому что функцию часто нужно описать раньше, чем появится необходимость её использовать. Чтобы запустить действия, функцию вызывают по имени и записывают скобки, например удвоить(4).
При вызове переданные аргументы связываются с параметрами в том порядке, в котором они указаны. Если функция определена как def разность(a, b):, то в вызове разность(9, 2) параметр a получит значение 9, а b — значение 2. После этого Python выполняет команды тела сверху вниз, поэтому порядок команд влияет на результат.
Команда return завершает работу функции и передаёт результат в место вызова. Например, return a + b возвращает сумму, которую можно присвоить переменной или вывести. Если задача функции — выполнить действие, например напечатать сообщение, явный return может не понадобиться; однако вывод на экран и возврат значения — разные вещи.
Переменные, созданные внутри функции, обычно являются локальными: они существуют в пределах её тела. Это помогает разным функциям использовать одинаковые имена для своих временных данных, не мешая друг другу. Основная программа не может обратиться к такой переменной напрямую, потому что она не входит в её область действия; нужный результат следует вернуть через return.
| Элемент | Назначение | Что указать или сделать |
|---|---|---|
| Заголовок функции | Задаёт имя и входные данные | def, имя, параметры и двоеточие |
| Тело функции | Описывает выполняемые действия | Команды с отступом |
| Вызов функции | Запускает выполнение тела | Имя функции и аргументы в скобках |
| return | Передаёт результат в место вызова | Выражение с результатом |
При написании функции удобно проверять элементы по таблице сверху вниз: сначала оформить заголовок и тело, затем найти место, где её нужно вызвать. Если программе требуется получить результат вычисления, добавьте return с нужным выражением. Вызов и определение — не одно и то же: вызов запускает уже описанные действия.
Условие: написать функцию, которая принимает число и выводит его квадрат, затем вызвать её для числа 5. Здесь цель функции — именно показать результат на экране, поэтому достаточно использовать print внутри тела. Важно отличить строку определения от отдельной команды вызова.
Ответ: программа выведет 25. Если написать только определение с def, число не появится: для запуска нужна команда квадрат(5). В этой задаче функция печатает результат, а не возвращает его для дальнейших вычислений.
Условие: функция принимает два числа и возвращает большее, а программа выводит результат для чисел, введённых пользователем. Поскольку значение понадобится за пределами функции, используем return, а не только print. Сравнение можно выполнить условием if и выбрать одно из двух чисел.
Ответ: для чисел 8 и 3 вызов вернёт 8, и на экран будет выведено 8. Можно записать результат вызова в переменную, например ответ = большее(a, b), а затем вывести её. Так возвращённое значение остаётся доступным вызывающему коду.
Условие: функция принимает список чисел и возвращает количество положительных элементов. Чтобы получить количество, заведём счётчик и будем увеличивать его при каждом числе больше нуля. Цикл нужен, чтобы проверить каждый элемент списка, а условие — чтобы учитывать только подходящие числа.
Ответ: для списка [-2, 4, 0, 7] функция вернёт 2, потому что положительны только 4 и 7. Ноль не считается положительным, поэтому условие должно быть именно число > 0. После вызова число 2 можно вывести или использовать в другом выражении.
Ожидать, что тело начнёт выполняться сразу после def. Определение только создаёт функцию, а начинающие иногда принимают его за команду запуска. Проверьте, есть ли ниже отдельный вызов по имени со скобками: без него команды тела не выполнятся.
Путать параметры и аргументы. Параметры записывают в заголовке, а аргументы передают при вызове; путаница мешает понять, откуда функция получает данные. Чтобы проверить себя, найдите обе записи и сопоставьте их по порядку: параметр x при вызове функция(5) получает аргумент 5.
Обращаться к локальной переменной снаружи функции. Это часто происходит, когда временную переменную внутри тела принимают за общую для всей программы. Если Python сообщает, что имя не определено, проверьте, где переменная создана; нужное значение можно вернуть через return.
Считать, что print возвращает результат. print выводит текст или число на экран, но не передаёт его вызывающему коду. Если результат нужно сохранить или использовать дальше, проверьте, есть ли return; отдельно решите, требуется ли затем вывести возвращённое значение.
Для работы с функциями нужны знакомые основы Python: команды, переменные, условия и циклы. Внутри функции можно применять их так же, как в основной программе, например перебирать список циклом и проверять элементы условием. Функции помогают повторно использовать код и делить программу на небольшие части, которые проще проверять и изменять. При решении более крупных задач этот подход становится особенно полезен, в том числе при изучении рекурсивных алгоритмов.
Чем функция отличается от команды, записанной в основной программе?
Команда в основной программе выполняется в том месте, где записана. Функция объединяет команды под именем: её можно вызвать из разных мест и передать ей данные. Так повторяющиеся действия не нужно дублировать.
Почему после определения функции она ещё не выполняется?
Команда def создаёт функцию и запоминает, какие действия нужно выполнить при её вызове. Это позволяет определить функцию до того, как она понадобится. Тело запускается только при обращении к имени функции со скобками.
Чем параметр отличается от аргумента?
Параметр — имя переменной в заголовке функции, через которую она получает данные. Аргумент — конкретное значение, переданное при вызове. Например, в вызове квадрат(5) число 5 — аргумент, а соответствующий параметр указан в определении функции.
Можно ли вернуть из функции сразу несколько значений?
Да. В Python команда return может вернуть несколько значений, разделённых запятыми: например, return минимум, максимум. При вызове их можно сохранить в две переменные, и каждое значение попадёт в свою переменную.
Почему переменная, созданная внутри функции, недоступна снаружи?
Такая переменная обычно локальная: она принадлежит телу функции и нужна для её работы. Основная программа не видит её по имени, потому что область действия переменной ограничена функцией. Если результат нужно использовать снаружи, его возвращают через return.
§ 25. Функции