Справочник Python. Функции в Python.

Функции в Python.

  1. Определение функции
  2. Передача параметров в функцию
  3. Возврат значения функции
  4.  Рекурсивный вызов функции
  5.  Лямбда-функции

Определение функции в Python.

Функции — блоки многократно используемого кода, который используется для выполнения определенной задачи. Подпрограммы обеспечивают модульность приложения и создают возможность повторного использования кода.

Блок подпрограммы начинается с ключевого слова def, после которого следуют имя подпрограммы и круглые скобки (). Скобки должны быть обязательно!
Пример функции в Python:

После создания функции, ее можно исполнять вызывая из другой функции или напрямую из оболочки Python.
Например:

Передача параметров в функцию в Python

Передача параметров в функцию в Python осуществляется по ссылке.
Вызывая функцию, можно передавать ей следующие типы аргументов:

  •  Обязательные аргументы (Required arguments)
  •  Именованные аргументы (Keyword argument)
  •  Аргументы со значением по умолчанию (Default argument)
  •  Список аргументов любой длины (Variable-length argumens)

Обязательные аргументы:

Если при создании функции мы указали количество передаваемых ей аргументов и их порядок, то и вызывать ее мы должны с тем же количеством аргументов, перечисленных в том же порядке.
Например:

Вызовы функции divide c количеством аргументов отличным от двух, приведут к ошибке. Порядок аргументов тоже важен, ведь divide(0,3) – напечатает значение, а divide(3,0) — вернет ошибку деления на ноль.

Именованные аргументы:

Именованные аргументы используются при вызове функции. Благодаря именнованым аргументам, вы можете задавать произвольный (отличный от описанного при определении функции) порядок аргументов.
Например:

Аргументы, заданные по-умолчанию:

Аргумент по умолчанию, это аргумент, значение для которого задается при создании функции.
Например:

Аргументы произвольной длины:

Иногда возникает необходимость передать функции произвольное количество аргументов. В этом случае следует использовать указатель на список аргументов произвольной длины. Они задаются произвольным именем, перед которым ставится звездочка (*).
Например:

Ключевое слово return

Выражение return прекращает выполнение функции и результат вычисления выражения, следующего за оператором return. Вызов return без аргументов равносилен вызову return None. Соответственно, теперь становится возможным, например, присваивать результат выполнения функции какой либо переменной.
Например:

Рекурсия

Рекурсией в программировании и математике называется такая функция что f(n) = f(f(n-1)). Классическим примером рекурсии может послужить функция вычисления факториала числа.
Факториалом числа, например, 10 является произведение всех натуральных чисел от 1 до 10. То есть, 1 * 2 * 3 * 4 * 5*6*7*8*9*10
Рекурсивная функция вычисления факториала на языке Python будет выглядеть так:

Рекурсивные функции являются сильным приемом в программировании. К сожалению, они не всегда эффективны, а также часто использование рекурсии приводит к ошибкам. Наиболее распространенная из таких ошибок – бесконечная рекурсия, когда цепочка вызовов функций не завершается пока не закончится свободная память в компьютере.. Две наиболее распространенные причины для бесконечной рекурсии:

  1.  Неправильное оформление выхода из рекурсии. Например, если мы в программе вычисления факториала забудем поставить проверку if n==0, то factorial(0) вызовет factorial(−1) factorial(−1), тот вызовет factorial(−2) factorial(−2) и т.д.
  2.  Рекурсивный вызов с неправильными параметрами. Например, если функция factorial(n) будет вызывать factorial(n) , то также получиться бесконечная цепочка.

Ограничение на глубину рекурсии

По умолчанию глубина рекурсии в языке Питон ограничена 1000 вызовов. Это ограничение можно поднять при помощи функции setrecursionlimit из модуля system. Например, чтобы увеличить возможную глубину рекурсии до 10000 нужно в начале программы выполнить две инструкции:

Следует учитывать, что глубину рекурсии нельзя увеличивать до очень большого значения, помимо ограничения, который устанавливается при помощи setrecursionlimit есть и ограничения операционной системы.

Лямбда-функции:

Python поддерживает возможность определять небольшие однострочные функции на лету. Подсмотренные в функциональных языках программирования, так назыаемые lambda-функции могут быть использованы везде, где требуется функция.
Например:

Эта lambda-функция делает то же самое, что и обычная функция, определенная выше. Обратите внимание на сокращенный синтаксис: список аргументов записывается без скобок и нет ключевого слова return. Кроме того, функция не имеет имени, но может быть вызвана через переменную, которой она присвоена:

Вы можете использовать lambda-функцию даже не присваивая ее переменной. Это совершенно искуственный пример, но он показывает, что lambda-функция может быть определена прямо в месте ее использования:

Обобщая, lambda-функция — это функция, которая имеет произвольное число аргументов (включая необязательные аргументы) и возвращает значение одного выражения. lambda-функции не могут содержать инструкций или более одного выражения. Не пытайтесь поместить в lambda-функцию слишком сложное выражение. Если вам необходимо что-либо более сложное — определите обычную функцию.