Искать
Вы превысили запрос на
0 знаков

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

Не пройден
0
0

Кратко

- Функции в Python - это именованные блоки кода, которые можно выполнять несколько раз.

- Функции позволяют указывать параметры, влияющие на возвращаемый результат.

- Функции сокращают объем кода и упрощают модификацию программы.

- В Python функции создаются с помощью инструкции def.

- Оператор return возвращает результат вызывающему коду и прекращает выполнение функции.

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

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

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

Введение

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

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

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

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

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

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

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

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

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

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

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

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

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

Оператор def

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

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

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

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

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

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

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

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

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

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

result() 

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

Отличие понятий «аргумент» и «параметр»

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

В следующем примере переменные x и y - параметры:

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

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

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

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

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

Явление, которое вы наблюдаете при подстановки данных разных типов вместо переменных x и y, называется полиморфизмом.

Полиморфизм

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

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

Пример (python)
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() может принимать любые итерируемые последовательности:

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

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

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

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

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

Тест

Две секундочки...

Похожие уроки Codebra

@codebra_official
Подписывайся на наш Telegram-канал!
Новости, полезный материал,
программирование и ИБ
Типы данных в PythonЗнакомство с Python
Обработка исключений (try/except) в PythonЗнакомство с Python
Генераторы и оператор yield в PythonЗнакомство с Python
Пользовательские функции в PHPКурс по PHP
Написание модулей в PythonЗнакомство с Python
Переменные, комментарии и типы данных в PHPКурс по PHP
Введение в раздел «Структуры данных в Python»Знакомство с Python
Первое знакомство с PythonЗнакомство с Python
Погружение в PythonЗнакомство с Python
Впервые на сайте Codebra?

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

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

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

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

Закрыть окно