Теория урока

13.1. Основы функций в Python

Оглавление урока

Введение

Мы уже достаточно познакомились с основами языка Python и даже применяли множество функций. Настало время разобраться в написании своих функций. Функция – набор операторов, упакованных в «именованный блок» (процедура), который можно выполнять несколько раз, вызвав его по имени. Так же функции позволяют указывать параметры, которые влияют на возвращаемый результат.

Функции сокращают объем кода, к тому же, если операцию необходимо модифицировать, будет нужно изменить код только в одном месте (в функции), а не в нескольких местах.

В последующих уроках мы познакомимся с операторами и выражениями, связанными с функциями: def, return, global, nonlocal, yield и lambda.

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

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

Во-вторых, при помощи функций вы разбиваете программу на логические части. Например, чтобы приготовить суп, вы совершаете различные действия: сходить в магазин, почистить овощи, налить воду и т.д. В то же время, вы совершаете те же самые действия или часть из них при приготовлении, например, тушенного мяса с овощами. Так и с программой, вы разбиваете ее на отдельные подпрограммы (функции), которые могут вызываться как единожды, так и неоднократно.

Особенности функций в Python

Возможно, вы имеете опыт работы с другими языками (например, в школе, как минимум знакомят с Pascal или C++). Языки Pascal и C++ компилируемые, в отличие от Python. Из этого вытекает особенность работы функций в последнем.

Инструкция def является исполняемым кодом. В Python новые функции создаются при помощи инструкции def, но в отличии от компилируемого языка C++, ваша функция не будет существовать до тех пор, пока интерпретатор Python не встретит ее при исполнении. То есть def можно вложить даже в условный оператор if или цикл.

Когда интерпретатор Python достигает инструкцию def, создается новый объект функции, который присваивается имени функции. Как вы помните из предыдущих уроков (урок 1.3.), в именованной области памяти хранится ссылка на объект, в данном случае на объект функции. Как вы узнаете позднее, объект функции можно присваивать другим именам, сохранять в списке и т.д.

Выражение lambda создает безымянную функцию. Она используется в тех случаях, когда def синтаксически неприменим. О лямбда-выражениях поговорим позднее.

Оператор return возвращает результат вызывающему коду. Он может размещаться в любом месте функции. По достижению оператора return, выполнение функции прекращается, и она возвращает результат.

Об операторах global, nonlocal и yield поговорим в следующих уроках.

Оператор def

Как мы уже ранее разобрались, оператор def создает объект функции. Рассмотрим синтаксис создания функции:

Пример
def имя_функции(арг_1, арг_2, … арг_N):
    операторы

После оператора def указывается имя функции. После имени функции указываются аргументы (о них позднее) в круглых скобках. Аргументы могут и не указываться:

Пример
def имя_функции():
    операторы

После круглых скобок ставится двоеточие, обозначающее начало блока или, по-другому, тела функции. Тело функции – это код, который выполняется каждый раз при вызове функции.

Выше представлены структуры функций, которые не возвращают значений. Рассмотрим следующий пример:

Пример
def имя_функции(арг_1):
    операторы
    return значение

Теперь что касается исполнение оператора def во время выполнения программы. Следующий пример кода будет работать в Python:

Пример
i = int(input())

if (i < 0):
    def result():
        print("-")
elif (i > 0):
    def result():
        print("+")

result()

С клавиатуры вводится число. Если число меньше 0, то будет выполняться соответствующий вариант функции result(). Создадим более наглядный и реальный пример, в котором перемножаются два числа переданный в виде аргументов.

Напомню отличие понятий «аргумент» и «параметр». Аргумент – это фактическое значение, которое передается функции в виде данных. Параметр – это переменная, которая используется при создании функции. В следующем примере переменные x и y -параметры:

Пример
def mult(x, y):
    return x * y

С функциями вы работали уже большое количество раз, например с функцией print(). Например, выведем результат, который вернет функция mult():

Пример
print(mult(4, 6)) # => 24

Вспомним еще вот что: Python является не типизированным языком (об этом мы говорили в уроке 2.3.) Поэтому следующие примеры использования функции mult() так же допустимы:

Пример
mult("Привет", 3) # => ПриветПриветПривет
mult(2.1, 3.6) # => 7.5600000000000005

Явление, которое вы наблюдаете при подстановки данных разных типов вместо переменных x и y, называется полиморфизмом. Полиморфизм – это способность функции обрабатывать данные различных типов.

Давайте напишем более практически применимую функцию, например, для нахождения пересечения:

Пример
def intersect(order_1, order_2):
    res = []
    for item_1 in order_1:
        if (item_1 in order_2):
            res.append(item_1)
    return res

print(intersect([1, "2", 3, 5], ["2", 1])) # => [1, '2']

Функция может принимать любые итерируемые последовательности:

Пример
intersect("Привет", "Пока") # => ['П']

Локальные переменные

В последнем примере используется переменная res, которая хранит результат выполнения функции (пересечение двух итерируемых объектов). Переменная res является локальной, т.е. ее видно только внутри функции (теле функции) и существует она только в период выполнения последней. Переменные order_1 и order_2 так же являются локальными. Именно по этой причине при повторном запуске функции, результат от выполнения предыдущего запуска той же функции не сохраняется в локальных переменных.

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

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

ПРОЧИТАНО
Следующий урок
<
×
>
Впервые на сайте Codebra?

Извините за это всплывающее окно, меня они тоже раздражают.

Образовательный ресурс codebra.ru полностью посвящен программированию. Все курсы и уроки находятся на главной странице. Ради интереса можете посмотреть на содержимое курсов по Python, HTML и CSS, JavaScript, C++ и другие, размещенные на главной странице.

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

Удачи в обучении!

Закрыть окно