Вроде бы функции они и в Африке функции, но попробую затронуть некоторые детали их написания на языке Python.
Что такое функция?
Функция - это кусок кода, который можно вызывать многократно с разными входными значениями.
Полезно делать декомпозицию программы, деля часто повторяющиеся действия на функции.
Функции можно определить и вызвать.
Функция может возвращать значения с помощью ключевого слова return. После написания слова return никакой код в теле функции не выполняется, так как функция прекращает свою работу.
Определение:
def function(<аргументы>):
<тело функции>
Вызов:
function(<аргументы>)
Функция может как принимать значения, так и не иметь аргументов.
Функции в Python - это объекты первого класса. То есть, их можно присвоить переменным, использовать как аргументы для других функций и возвращать из функций.
Об аргументах
Позиционные аргументы
Это аргументы по порядку их написания: он должен быть одинаков как при вызове, так и при определении.
def function(x, y):
<тело функции>
Вот так:
function(10, 20) # x = 10, y = 20
Аргументы - ключевые слова
Если позиционные аргументы заставляют вас путаться, то можно явно указывать их при вызове:
function(x=10, y=20)
Параметры по умолчанию
Можно указывать аргументы по умолчанию при определении функции:
def function(x, y=20):
<тело функции>
В таком случае при вызове, если аргумент будет пропущен, то будет использовано объявленное значение из определения.
function(x=10)
Если же передано два аргумента, то приоритет будет отдан значению из вызова функции.
function(x=10, y=20)
Это удобно, когда мы точно не знаем, будет ли использован аргумент, но есть какая-то константа по умолчанию.
Позиционные аргументы с помощью *
При использовании * будет создан кортеж, куда можно передать любую последовательность:
def function(*args):
<тело функции>
Этот способ позиционирования аргументов полезен, когда нужно передать в обработку функции последовательность случайной длины
Аргументы - ключевые слова с помощью **
С помощью ** можно сгруппировать аргументы - ключевые слова в словарь:
def function(**kwargs):
<тело функции>
Таким образом:
function(name = "Max", age = 21)
Функция получит в качестве аргумента словарь вида:
dict = {name: "Max", age: 21}
А это также удобно, когда мы не знаем точное количество данных, которое должно быть передано функции, и при этом даст возможность группировки значений по критериям.
Строки документации
Согласно рекомендации PEP8 по комментированию кода, для удобства, каждая функция должна быть описана.
Для вывода строки документации используется команда help()
help(echo)
Что даст такую картину:
Help on function echo in module __main__:
echo()
Функция выводящая сообщение
Чтобы увидеть строку документации без форматирования, можно использовать:
print(echo.__doc__)
Функция выводящая сообщение
Также можно создавать декораторы функций, но об этом расскажу в другой раз.