0 знаков
48. Основы функций в Python
Кратко- Функции в Python - это именованные блоки кода, которые можно выполнять несколько раз.
- Функции позволяют указывать параметры, влияющие на возвращаемый результат.
- Функции сокращают объем кода и упрощают модификацию программы.
- В Python функции создаются с помощью инструкции
def
.- Оператор
return
возвращает результат вызывающему коду и прекращает выполнение функции.- Оператор
def
создает объект функции, который можно присваивать другим именам или сохранять в списке.- Выражение
lambda
создает безымянную функцию, которая используется в случаях, когдаdef
неприменим.- Операторы
global
,nonlocal
иyield
будут рассмотрены в следующих уроках.
Введение
Мы уже достаточно познакомились с основами языка Python и даже применяли множество функций. Настало время разобраться в написании своих функций. Функция – набор операторов, упакованных в «именованный блок» (процедура), который можно выполнять несколько раз, вызвав его по имени. Так же функции позволяют указывать параметры, которые влияют на возвращаемый результат.
Функции сокращают объем кода, к тому же, если операцию необходимо модифицировать, будет нужно изменить код только в одном месте (в функции), а не в нескольких местах.
В последующих уроках мы познакомимся с операторами и выражениями, связанными с функциями: def
, return
, global
, nonlocal
, yield
и lambda
.
Для начала разберемся для чего используются функции. Возможно, вы уже встречали функции в других языках программирования под другими названиями: подпрограммы или процедуры.
Во-первых, функции позволяют сократить избыточность кода, что позитивно сказывается на объеме работ по сопровождению.
Во-вторых, при помощи функций вы разбиваете программу на логические части. Например, чтобы приготовить суп, вы совершаете различные действия: сходить в магазин, почистить овощи, налить воду и т.д. В то же время, вы совершаете те же самые действия или часть из них при приготовлении, например, тушенного мяса с овощами. Так и с программой, вы разбиваете ее на отдельные подпрограммы (функции), которые могут вызываться как единожды, так и неоднократно.
Особенности функций в Python
Возможно, вы имеете опыт работы с другими языками (например, в школе, как минимум знакомят с Pascal или C++). Языки Pascal и C++ компилируемые, в отличие от Python. Из этого вытекает особенность работы функций в последнем.
Инструкция def
является исполняемым кодом. В Python новые функции создаются при помощи инструкции def
, но в отличии от компилируемого языка C++, ваша функция не будет существовать до тех пор, пока интерпретатор Python не встретит ее при исполнении. То есть def
можно вложить даже в условный оператор if
или цикл.
Когда интерпретатор Python достигает инструкцию def
, создается новый объект функции, который присваивается имени функции. Как вы помните из предыдущих уроков, в именованной области памяти хранится ссылка на объект, в данном случае на объект функции. Как вы узнаете позднее, объект функции можно присваивать другим именам, сохранять в списке и т.д.
Выражение 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 является не типизированным языком (об этом мы говорили в уроке про типы данных) Поэтому следующие примеры использования функции 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()
может принимать любые итерируемые последовательности:
intersect("Привет", "Пока") # => ['П']
Локальные переменные
В предпоследнем примере используется переменная res
, которая хранит результат выполнения функции (пересечение двух итерируемых объектов). Переменная res
является локальной, т.е. ее видно только внутри функции (теле функции) и существует она только в период выполнения последней. Переменные order_1
и order_2
так же являются локальными. Именно по этой причине при повторном запуске функции, результат от выполнения предыдущего запуска той же функции не сохраняется в локальных переменных.
Про область видимости переменных поговорим в следующем уроке, так же, как и про сохранение состояния функции после ее завершения.
В этом уроке познакомились с основами функций: из каких операторов состоит (может состоять) функция, что такое параметры и аргументы. Так же начали обсуждать область видимости переменных.
Тест
Похожие уроки Codebra
Подписывайся на наш Telegram-канал!
Новости, полезный материал,
программирование и ИБ
Подписывайся на наш Telegram-канал!
Новости, полезный материал,
программирование и ИБ