Я написал эту статью, чтобы помочь вам понять, как функции могут облегчить вам жизнь при написании программ на 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 выполняется строка за строкой до тех пор, пока не встретится вызов функции, в данном случае 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.