Основы функций в Python: сделайте свой код пригодным для повторного использования

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

Концепция функции в Python такая же, как и во многих других языках программирования.

Функции позволяют вам организовывать код в модульные блоки и делать код повторно используемым. Чем больше растет ваш код Python, тем сложнее им становится управлять, если вы не используете функции. После определения функции вы можете вызывать ее несколько раз в своем коде без необходимости переписывать этот код снова (избегайте дублирования кода).

Ниже вы можете увидеть полный синтаксис функции:

def function_name(parameters):
    """docstring"""
    function_body

Компоненты, используемые для определения функции Python:

  • header: состоит из ключевого слова def, с которого начинается определение функции, имени функции, параметров, заключенных в скобки, и символа двоеточия. Параметры необязательны, функция может также не иметь параметров. Кроме того, функция может иметь любое количество параметров.
  • docstring: предоставляет документацию о функции.
  • body: это последовательность операторов Python, которая может заканчиваться необязательным returnоператором, если функция возвращает значение.

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

def say_hello(name):
    print("Hello "+name)

Имя функции — say_hello(), и она принимает один параметр с именем name.

Функция выполняет один оператор печати для печати слова «Hello», объединенного со значением параметра, переданного функции.

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

say_hello("Codefather")
# Hello Codefather

Визуальное представление того, как работает функция

Мы увидели, как определить функцию и как ее вызвать.

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

Вызов функции в программе Python

Программа Python выполняется строка за строкой до тех пор, пока не встретится вызов функции, в данном случае say_hello().

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

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

Как определить функцию с помощью ключевого слова def

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

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

Я обновлю предыдущую функцию для вывода сегодняшней даты с помощью модуля datetime:

from datetime import date

def say_hello(name):
    today = str(date.today())
    message = "Hello "+name+". Today is "+today
    print(message)

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

При вызове функция выводит следующее сообщение (см. код в третьей строке функции).

Hello Codefather. Today is 2021-07-31

Если вы забудете преобразовать сегодняшнюю дату в строку, вы получите следующее исключение TypeError:

Traceback (most recent call last):
  File "functions.py", line 9, in <module>
    say_hello("Codefather")
  File "functions.py", line 5, in say_hello
    message = "Hello "+name+". Today is "+today
TypeError: can only concatenate str (not "datetime.date") to str

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

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

def say_hello(name):
    today = str(date.today())
message = "Hello "+name+". Today is "+today
    print(message)

И посмотрите, что произойдет:

  File "functions.py", line 6
    print(message)
    ^
IndentationError: unexpected indent

Если отступ одной или нескольких строк в функции неверен, интерпретатор Python выдает исключение IndentationError.

Что такое ключевое слово «return» в функции Python?

В функции, которую мы рассматривали до сих пор, код функции выводит сообщение.

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

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

number1 = 10
number2 = 15
result = number1+number2
print("The sum of the two numbers is "+str(result))

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

Мы можем добавить к нему оператор возврата:

def calculate_sum(a, b):
    result = a+b
    return result

Что делает оператор return в Python?

Как видите, в функции выше мы:

  • возьмем два параметра a и b.
  • вычислить сумму двух параметров и сохранить ее в переменной result.
  • используйте ключевое слово return для возврата суммы result.

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

number1 = 10
number2 = 15
print("The sum of the two numbers is "+str(calculate_sum(number1, number2)))

Видите ли вы, что на этот раз в операторе печати мы вызываем функцию calculate_sum()?

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

Автор

Фото аватара

Владимир Михайлов

Программист на Python с большим количеством опыта и разнообразных проектов.