Уроки Питона №7/10. Функции def в Питоне
Урок 10. Функции в Python
Урок посвящен созданию функций в 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 z(x,y):
return x*y
>>> def z(5,8)
40
Рассмотрим еще два примера использования функции: вычисление числа Фибоначчи с использованием рекурсии и вычисление факториала с использованием цикла.
Вычисление числа Фибоначчи.
>>> 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 принимает два аргумента, первый – это функция, которая будет применена к каждому элементу списка, а второй – это список, который нужно обработать.
>>> list1 = [1, 2, 3, 4, 5, 6, 7]
>>> list(map(lambda x: x**3, list1))
[1, 8, 27, 64, 125, 216, 343]