Функция в Python: руководство для начинающих

Мир IT меняется очень быстро, и успевать за ним нелегко. Но если вы хорошо разбираетесь в какой-нибудь технологии, это дает вам определенные преимущества.

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

Цель этой статьи – дать вам знания, необходимые для начала работы с функциями в Python.

Итак, давайте начнем!

Зачем нужны функции Python?

Функции управляют входными и выходными данными в компьютерных программах. Языки программирования предназначены прежде всего для работы с данными. А функции — эффективный способ управления этими данными и их преобразованиями.

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

Фактически, основной (main) код — это тоже функция, просто очень важная. Все другие функции логически выстраиваются, чтобы выполняться из основного кода.

Но если функция не была объявлена ранее, вам придется сперва ее объявить. Дело в том, что в объявлении перечисляются шаги, которые выполняет функция.

Вы бы предпочли написать один фрагмент кода 10 раз или только единожды, а затем использовать его 10 раз?

Итак, функции – это не что иное, как задачи, которые хочет выполнять пользователь. И если вы пропишете нужную функциональность один раз и дадите ей имя, вы сможете использовать ее повторно, не превращая свою программу в огромного монстра. Это значительно сокращает количество строк кода и даже упрощает отладку.

Мы скоро поговорим об этом, но первая причина, по которой стоит использовать функцию, – это возможность ее повторного использования.

Функции как средство повторного использования кода

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

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

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

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

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

[python_ad_block]

Что собой представляет функция в Python?

Функция в Python – классический пример многократного использования кода.

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

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

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

Дело в том, что Python придерживается принципа DRY. Аббревиатура расшифровывается как Don’t Repeat Yourself («Не повторяйся»).

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

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

Определение функции

Функция – это подпрограмма, которая работает с данными и производит некоторый вывод.

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

Python для обозначения блоков использует отступы вместо скобок, чтобы код был более читабельным.

Функция в Python может содержать любое количество параметров или не содержать ни одного.

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

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

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

Правила присвоения имени функции такие же, как для переменных. Имя должно начинаться или с буквы от A до Z в любом регистре, или с подчеркивания _. Остальная часть имени может содержать символы подчеркивания, цифры от 0 до 9, любые буквы в верхнем или нижнем регистре.

При этом:

  • именем функции не может стать зарезервированное ключевое слово
  • важно следить за грамматикой: это повышает читабельность кода.

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

Типы функций в Python

В Python есть много видов функций. И каждый из них по-своему очень важен:

  • встроенные функции
  • рекурсивные функции
  • лямбда-функции
  • пользовательские функции

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

Встроенные функции Python

Интерпретатор Python имеет ряд функций, которые всегда доступны для использования. Эти функции называются встроенными.

Например, функция print() выводит указанный объект на стандартное устройство вывода (экран) или в файл текстового потока.

В Python 3.6 есть 68 встроенных функций. Давайте рассмотрим несколько наиболее часто используемых.

Функция all()

Метод all() возвращает True, если все элементы в данном итерируемом объекте истинны. В противном случае возвращается False.

Синтаксис метода all():

all(iterable)

Метод all() принимает единственный параметр — iterable. Это любой итерируемый объект (список, кортеж, словарь и т.д.), который содержит элементы.

Пример:

# all values true
l = [1, 3, 4, 5]
print(all(l))
 
# all values false
l = [0, False]
print(all(l))
 
# one false value
l = [1, 3, 4, 0]
print(all(l))
 
# one true value
l = [0, False, 5]
print(all(l))
 
# empty iterable
l = []
print(all(l))

# Output:
# True
# False
# False
# False
# True

Функция abs()

Метод abs() возвращает абсолютное значение заданного числа. Если число является комплексным, abs() возвращает его величину.

Синтаксис метода abs():

abs(num)

Метод abs() принимает единственный аргумент — num. Это число, абсолютное значение которого должно быть возвращено. Число может быть целым, с плавающей точкой или комплексным.

# random integer
integer = -20
print('Absolute value of -20 is:', abs(integer))
 
#random floating number
floating = -30.33
print('Absolute value of -30.33 is:', abs(floating))

# Output:
# Absolute value of -20 is: 20 Absolute value of -30.33 is: 30.33

Функция enumerate()

Метод enumerate() добавляет счетчик к итерируемому объекту и возвращает индексы элементов с их значениями.

Синтаксис:

enumerate(iterable, start = 0)

Метод enumerate() принимает два параметра:

  • iterable – последовательность, итератор или объекты, поддерживающие итерацию.
  • start (необязательный) – enumerate() начинает отсчет с этого числа. Если start опущен, за начало принимается 0.
grocery = ['bread', 'milk', 'butter']
enumerateGrocery = enumerate(grocery)
 
print(type(enumerateGrocery))
 
# converting to list
print(list(enumerateGrocery))
 
# changing the default counter
enumerateGrocery = enumerate(grocery, 10)
print(list(enumerateGrocery))

# Output
# <class 'enumerate'>
# [(0, 'bread'), (1, 'milk'), (2, 'butter')]
# [(10, 'bread'), (11, 'milk'), (12, 'butter')]

Также существует множество других встроенных функций, например:

  • ascii() — для вывода символов, отличных от ASCII
  • bin() — для бинарного представления числа
  • dict() — чтобы создать словарь
  • sum() — для вычисления суммы
  • help() — для вызова справочника Python
  • len() — чтобы определить длину итерируемого объекта
  • max() — поиск максимального значения
  • min() — поиск минимального значения
  • pow() — чтобы возвести число в степень.

Рекурсивные функции в Python

Рекурсия – это определение чего-либо в терминах самого себя.

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

Мы знаем, что функция в Python может вызывать другие функции. Но функция может вызывать и сама себя. Конструкции такого типа и называются рекурсивными функциями.

Ниже приведен пример рекурсивной функции для поиска факториала целого числа.

Факториал числа – это произведение всех целых чисел от 1 до этого числа. Например, факториал 5 (обозначается как 5!) это 1 * 2 * 3 * 4 * 5 = 120.

# An example of a recursive function to
# find the factorial of a number
 
def calc_factorial(x):
    """This is a recursive function
    to find the factorial of an integer"""
 
    if x == 1:
        return 1
    else:
        return (x * calc_factorial(x-1))
 
num = 4
print("The factorial of", num, "is", calc_factorial(num)) 

В приведенном выше примере calc_factorial() является рекурсивной функцией, потому что она вызывает саму себя.

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

Наша рекурсия заканчивается, когда число уменьшается до 1. Это называется базовым случаем. Каждая рекурсивная функция должна иметь базовый случай, останавливающий рекурсию, потому что иначе функция будет вызывать себя бесконечно.

Преимущества рекурсии:

  • рекурсивные функции делают код чистым и элегантным
  • с помощью рекурсии сложную задачу можно разбить на более простые подзадачи
  • с помощью рекурсии генерировать последовательность проще, чем с использованием вложенной итерации.

Недостатки рекурсии:

  • иногда трудно понять ее логику
  • рекурсивные вызовы дороги (неэффективны), поскольку занимают много памяти и времени
  • рекурсивные функции сложно отлаживать.

От редакции Pythonist. Больше примеров использования рекурсии можно найти в статье «Примеры программ с использованием рекурсии на языке Python».

Лямбда-функции в Python

В Python можно определить функцию, не давая ей имени. Такая функция называется анонимной.

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

Лямбда-функция в Python имеет следующий синтаксис:

lambda arguments: expression

Лямбда-функции могут иметь любое количество аргументов, но только одно выражение.

# Program to show the use of lambda functions
 
double = lambda x: x * 2
print(double(5))

# Output
# 10

В приведенной выше программе lambda x: x * 2 – это лямбда-функция. Здесь x – аргумент, а x * 2 — выражение, которое вычисляется и возвращается.

У этой функции нет имени. Она возвращает объект функции, которому присвоен идентификатор double. Благодаря этому мы можем вызывать ее, как обычную функцию.

Пользовательские функции Python

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

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

Преимущества пользовательских функций

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

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

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

Пример пользовательской функции

def add_numbers(x,y):
   sum = x + y
   return sum
 
num1 = 5
num2 = 6
print("The sum is", add_numbers(num1, num2))

# Output:
# Enter a number: 2.4
# Enter another number: 6.5
# The sum is 8.9

И в заключение давайте посмотрим, как с помощью функций Python создать простое приложение.

Создаем калькулятор на Python

В этом примере мы создадим простой калькулятор, умеющий складывать, вычитать, умножать или делить числа, введенные пользователем.

# This function adds two numbers 
def add(x, y):
   return x + y
 
# This function subtracts two numbers 
def subtract(x, y):
   return x - y
 
# This function multiplies two numbers
def multiply(x, y):
   return x * y
 
# This function divides two numbers
def divide(x, y):
   return x / y
 
print("Select operation.")
print("1.Add")
print("2.Subtract")
print("3.Multiply")
print("4.Divide")
 
# Take input from the user 
choice = input("Enter choice(1/2/3/4):")
 
num1 = int(input("Enter first number: "))
num2 = int(input("Enter second number: "))
 
if choice == '1':
   print(num1,"+",num2,"=", add(num1,num2))
 
elif choice == '2':
   print(num1,"-",num2,"=", subtract(num1,num2))
 
elif choice == '3':
   print(num1,"*",num2,"=", multiply(num1,num2))
 
elif choice == '4':
   print(num1,"/",num2,"=", divide(num1,num2))
else:
   print("Invalid input")

В результате получим следующее:

Output

Select operation.
1.Add
2.Subtract
3.Multiply
4.Divide
Enter choice(1/2/3/4): 3
Enter first number: 15
Enter second number: 14
15 * 14 = 210

Заключение

Надеемся, вам понравилось это руководство по функциям. Теперь вы знаете, что из себя представляет функция в Python, какие функции бывают, как их писать и как ими пользоваться. Создание собственных функций поможет вам удобно добавлять нужный функционал в свои программы.

Успехов в дальнейшем освоении Python!

Сокращенный перевод статьи «A Beginners Guide To Python Functions».