Урок посвящен созданию функций в Python и работе с ними (передача аргументов, возврат значения и т.п.). Также рассмотрены lambda-функций, их особенности и использование.
Что такое функция в Python?
По своей сути функции в Python практически ничем не отличаются от функций из других языков программирования. Функцией называют именованный фрагмент программного кода, к которому можно обратиться из другого места вашей программы (но есть lambda-функции, у которых нет имени, о них будет рассказано в конце урока). Как правило, функции создаются для работы с данными, которые передаются ей в качестве аргументов, также функция может формировать некоторое возвращаемое значение.
Создание функций
Для создания функции используется ключевое слово def, после которого указывается имя и список аргументов в круглых скобках. Тело функции выделяется также как тело условия (или цикла): четырьмя пробелами. Таким образом самая простая функция, которая ничего не делает, будет выглядеть так.
def fun(): pass
Возврат значения функцией осуществляется с помощью ключевого слова return, после которого указывается возвращаемое значение. Пример функции возвращающей единицу представлен ниже.
>>> def fun(): return 1 >>> fun() 1
Работа с функциями
Во многих случаях функции используют для обработки данных. Эти данные могут быть глобальными, либо передаваться в функцию через аргументы. Список аргументов определяется на этапе реализации и указывается в круглых скобках после имени функции. Например операцию сложения двух аргументов можно реализовать вот так.
>>> def summa(a, b): return a + b >>> summa(3, 4) 7
Рассмотрим еще два примера использования функции: вычисление числа Фибоначчи с использованием рекурсии и вычисление факториала с использованием цикла.
Вычисление числа Фибоначчи.
>>> def fibb(n): if n == 0: return 0 elif n == 1: return 1 elif n == 2: return 1 else: return fibb(n-1) + fibb(n-2) >>> print(fibb(10)) 55
Вычисление факториала.
>>> def factorial(n): prod = 1 for i in range(1, n+1): prod *= i return prod >>> print(factorial(5)) 120
Функцию можно присвоить переменной и использовать ее, если необходимо сократить имя. В качестве примера можно привести вариант использования функции вычисления факториала из пакета math.
>>> import math >>> f = math.factorial >>> print(f(5)) 120
lambda-функции
Lambda-функция – это безымянная функция с произвольным числом аргументов и вычисляющая одно выражение. Тело такой функции не может содержать более одной инструкции (или выражения). Данную функцию можно использовать в рамках каких-либо конвейерных вычислений (например внутри filter(), map() и reduce()) либо самостоятельно, в тех местах, где требуется произвести какие вычисление, которые удобно “завернуть” в функцию.
>>> (lambda x: x**2)(5) 25
Lambda-функцию можно присвоить какой-либо переменной и в дальнейшем использовать ее в качестве имени функции.
>>> sqrt = lambda x: x**0.5 >>> sqrt(25) 5.0
Списки можно обрабатывать lambda-функциями внутри таких функций как map(), filter(), reduce(), о них мы ещё поговорим, а пока рассмотрим пример с map(). Функция map принимает два аргумента, первый – это функция, которая будет применена к каждому элементу списка, а второй – это список, который нужно обработать.
>>> l = [1, 2, 3, 4, 5, 6, 7] >>> list(map(lambda x: x**3, l)) [1, 8, 27, 64, 125, 216, 343]
P.S.
Если вам интересна тема анализа данных, то мы рекомендуем ознакомиться с библиотекой Pandas. На нашем сайте вы можете найти вводные уроки по этой теме. Все уроки по библиотеке Pandas собраны в книге “Pandas. Работа с данными”.
<<< Python. Урок 9. Словари (dict) Python. Урок 11. Работа с исключениями>>>
Спасибо)) Благодаря этим материалам хочу стать хацкером)
Приветствую. Честно говоря я не понял как работает пример с Фибоначчи. Если я ввожу к примеру 5, исходя из поставленных условий будет выполняться последнее else что в итоге должно выдавать fibb(5-1) + fibb(5-2) = 4 + 3 = 7 , а программа выдает 5 как и должно быть. Почему так?
fibb(5-1) + fibb(5-2) – это не 4 + 3, а число Фибоначчи по 4 + число Фибоначчи по 3, что соответствует Ф(4) = (Ф(3) + Ф(2)) = 3 и Ф(3) = (Ф(2) + Ф(1)) = 2 ==> 3+2 = 5
Нумерация чисел Фибоначчи начинается с 1 (Число 1, число 2, число 3 и тд.) Соответственно n никогда не будет 0.
Дружище, тем рекурсивный вызов, а никакие не 4+3=7 🙂