Цель данной статьи
Чтобы перейти к более глубоким концепциям языка, рассмотрим функции в Python. В настоящей статье мы изучим разные виды функций: встроенные функции, рекурсивные функции, лямбда-функции и функции, определенные пользователем. Мы разберем их синтаксис и примеры их работы.
Итак, приступим к обучению!
Введение
Функция, написанная на любом языке программирования, представляет собой последовательность операторов в определенном порядке и с заданным именем. При вызове функции эти операторы выполняются. Таким образом, нам не нужно снова и снова писать код для каждого типа данных, к которому мы хотим его применить. Это называется возможностью повторного использования кода.
Для простоты мы разделим это пособие на две части. Сначала мы поговорим о пользовательских функциях. Python позволяет нам сгруппировать последовательность операторов в единую сущность, называемую функцией. Функция в Python может иметь или не иметь имени. Мы рассмотрим функции без имени позже в этом руководстве.
Пользовательские функции
Преимущества пользовательских функций в Python
- Функции помогают разделить программу на отдельные модули. Это упрощает управление, отладку и масштабирование кода.
- Функции реализует повторное использование кода. Каждый раз, когда вам нужно выполнить последовательность операторов, все, что вам нужно для этого сделать, это вызвать функцию.
Обозначение функции в Python
Чтобы определить свою собственную функцию в Python, вам нужно написать ключевой слово def
перед именем функции. И за его именем должны следовать круглые скобки, а после них двоеточие ‘:
‘.
def hello(): print("Hello")
Содержимое внутри тела функции должно иметь одинаковый отступ.
Вы можете определить строку документации прямо под первой строкой объявления функции. Она будет объяснять, что делает эта функция.
def hello(): """ This Python function simply prints hello to the screen """ print("Hello")
При помощи атрибута __doc__
можно получить доступ к этой строке документации.
def func1(): """ This is the docstring """ print("Hello") func1.__doc__ # Результат: # 'This is the docstring'
Однако, если вы примените этот атрибут к функции без строки документации, произойдет следующее:
sum.__doc__ type(sum.__doc__) # Результат: # <class 'NoneType'> bool(sum.__doc__) # Результат: # False
Если вы еще не знаете какой код должен быть в вашей функции, то поместите туда оператор pass
. В противном случае вы получите следующее сообщение об ошибке: “Expected an indented block”.
def hello1(): pass hello1()
А дальше вы всегда сможете вашу функцию переопределить.
Правила именования функций в Python
При именовании функций мы следуем тем же правилам, что и при именовании переменных.
- Имя может начинаться с одного из следующих символов: A-Z, a-z и знак подчеркивания ‘
_
‘. - Остальная часть имени может содержать следующие символы: AZ, az, цифры (0-9) и подчеркивание (_).
- Зарезервированные ключевые слова не могут быть выбраны в качестве имени (идентификатора) функции или переменной.
Хорошей практикой считается называть функцию так, чтобы было понятно что она делает.
Параметры функций в Python
Иногда требуется, чтобы функция работала с некоторыми переменными и возвращала результат. Такая функция может принимать любое количество параметров. Для примера рассмотрим функцию, которая складывает два числа.
def sum(a,b): print(f"{a}+{b}={a+b}") sum(2,3) # Результат: # 2+3=5
Здесь функция sum()
принимает два параметра — a
и b
. Когда мы вызываем функцию, то передаем в нее числа 2
и 3
. Это аргументы a
и b
соответственно. Функции в Python могут содержать любое количество параметров или вообще ни одного.
В следующем примере мы попробуем сложить целое число (тип int
) и число с плавающей запятой (тип float
):
def sum2(a,b): print(f"{a}+{b}={a+b}") sum2(3.0,2) # Результат: # 3.0+2=5.0
Но несовместимые типы данных складывать нельзя:
sum2('Hello',2)
Результат:
Traceback (most recent call last): File “<pyshell#39>”, line 1, in <module> sum2(‘Hello’,2) File “<pyshell#38>”, line 2, in sum2 print(f”{a}+{b}={a+b}”) TypeError: must be str, not int
Оператор return
Функции в Python могут (но необязательно) возвращать значения. Значение может быть результатом работы данной функции или тем, чем вы определите – выражением или какой-то величиной.
def func1(a): if a%2==0: return 0 else: return 1 func1(7) # Результат: # 1
Как только интерпретатор доходит до оператора return
, выполнение функции прекращается. И затем уже будет выполняться следующий после вызова функции оператор. Теперь давайте попробовать вернуть выражение:
def sum(a,b): return a+b sum(2,3) # Результат: # 5
Вызов функции в Python
Чтобы вызвать функцию в Python, нужно просто написать ее название в нужном месте вашего кода и передать в нее аргументы, если они имеются. Давайте вызовем объявленную ранее функцию hello()
:
hello() # Результат: # Hello
Как вызывать функцию с аргументами, мы уже видели в предыдущем разделе.
Область видимости и время жизни переменных в Python
Переменная в Python не везде видна и время ее жизни ограничено. Мы касаемся этого вопроса здесь потому, что все это может зависеть от того, находится ли переменная внутри функции или вне ее.
Область видимости
Область видимости переменной говорит нам, где в программе она доступна. Переменная может иметь локальную или глобальную область видимости.
Переменная, объявленная внутри функции, имеет локальную область видимости. Другими словами, она является локальной для этой самой функции.
def func3(): x=7 print(x) func3() # Результат: # 7
Теперь, если вы попытаетесь получить доступ к переменной x
вне функции, у вас ничего не выйдет.
x
Результат:
Traceback (most recent call last): File “<pyshell#96>”, line 1, in <module> x NameError: name ‘x’ is not defined
Когда вы объявляете переменную вне функции Python, она имеет глобальную область видимости. Это означает, что она видна везде внутри программы.
y=7 def func4(): print(y) func4() # Результат: # 7
Однако вы не можете изменить ее значение внутри локальной области видимости (в данном случае — внутри функции). Для этого вы должны объявить ее глобальной внутри функции, используя для этого ключевое слово global
.
def func4(): global y y+=1 print(y) func4() # Результат: # 8 y # Результат: # 8
Как можно заметить, значение переменной y было изменено.
Срок жизни переменной
Время жизни переменной — это период времени, в течение которого она находится в памяти.
Переменная, объявленная внутри функции Python, уничтожается после того, как функция перестает выполняться. Поэтому при следующем вызове функции предыдущее значение этой переменной неизвестно.
def func1(): counter=0 counter+=1 print(counter) func1() # Результат: # 1 func1() # Результат: # 1
Как можно заметить, значение переменной внутри функции не растет.
Удаление функции Python
До сих пор мы видели, что можно удалять переменные. Точно так же при помощи команды del
можно удалить и функцию.
def func7(): print("7") func7() # Результат: # 7
del func7 func7()
Результат:
Traceback (most recent call last): File “<pyshell#137>”, line 1, in <module> func7() NameError: name ‘func7’ is not defined
При удалении функции скобки после ее имени ставить не нужно.
Встроенные функции Python
Эти функции Python применяется к таким конструкциям, как int
, float
, bin
, hex
, string
, list
, tuple
, set
, dict
и так далее. Мы рассмотрим их в соответствующих статьях про эти типы данных.
Лямбда функции в Python
Как мы уже говорили ранее, у функции не обязательно должно быть имя. Лямбда-выражение в Python позволяет нам создать анонимную функцию, и мы используем для нее ключевое слово lambda
. Ниже приведен синтаксис лямбда-выражения.
myvar=lambda a, b : (a * b) + 2 myvar(3, 5) # Результат: # 17
Этот код принимает числа 3
и 5
в качестве аргументов a
и b
соответственно и помещает их в выражение (a * b) + 2
. Получается (3 * 5) + 2
, что равно 17
. Наконец, возвращается 17
.
Собственно, объекту функции присваивается идентификатор myvar
.
Рекурсивные функции в Python
Рекурсия – это очень интересная концепция в любой области знаний. В рекурсии используется что-то чтобы определить себя через обращение к себе. В Python это означает, что функция вызывает саму себя. Чтобы увидеть, как это может быть полезно, давайте попробуем вычислить факториал числа. Математически факториал числа это: n!=n*n-1*n-2*…*2*1
В виде кода это выглядит следующим образом:
def facto(n): if n==1: return 1 return n*facto(n-1) facto(5) # Результат: # 120 facto(1) # Результат: # 1 facto(2) # Результат: # 2 facto(3) # Результат: # 6
Это все, что мы пока хотим вам сказать про рекурсию в Python.
Заключение
Чтобы лучше запомнить прочитанное, важно кратко резюмировать полученную информацию. В этой статье мы узнали о функциях в Python. Во-первых, мы увидели преимущества применения пользовательских функций в Python. Теперь мы можем создавать, обновлять и удалять функции. И мы знаем, что функция может принимать аргументы и возвращать значение. Мы также рассмотрели область видимости и время жизни переменной. Надеемся, что вам понравилось данное руководство по функциям Python.
Перевод статьи Python Function Tutorial – Type of Functions in Python(With Example).