Функции в Python создаются с помощью инструкции
def
Это действие создает объект функции и присваивает ему имя, которое становится ссылкой на объект-функцию.
Пример определения функции:
def MyFirstFunction(arg1, arg2, arg3):
return arg1 + arg2 + arg3
Здесь MyFirstFunction — это имя функции, используемое как для ее определения, так и для ее вызова.
После заголовка с новой строки и с отступом следуют выражения тела функции.
В теле функции присутствует (их может быть несколько) инструкция return (может и не быть), которая прерывает выполнение функции возвращает значение в основную ветку программы.
Вызов функции и возврат значения
Пример вызова функции:
x = MyFirstFunction(10, 2, 5)
В данном случае, если бы в функции не было инструкции return, то в основную программу ничего бы не возвращалось, и переменной x числовое значение не присваивалось бы. Если функция не возвращает значение явно с помощью команды return, то автоматически возвращается значение None.
Передача параметров в функцию
При описании функции после имени в скобках перечисляются параметры функции. Если их нет, то скобки остаются пустыми, но они обязательно должны быть. Далее идет двоеточие, обозначающее окончание заголовка функции.
При вызове функции в скобках указывается нужное количество переменных или выражений, значения которых будут переданы функции в качестве параметров. Если у функции нет параметров, скобки (пустые) при вызове все равно нужны.
Допустим, необходимо вычислить число сочетаний из n элементов по k, равное
Примеры
n!/(k!(n−k)!)
, для чего необходимо вычисление факториалов трех величин: n, k и n-k. Для этого можно сделать три цикла, что приводит к увеличению размера программы за счет трехкратного повторения похожего кода. Вместо этого лучше сделать одну функцию, вычисляющую факториал любого данного числа n и трижды использовать эту функцию в своей программе. Соответствующая функция может выглядеть так:
def factorial(n):
result = 1
for i in range(2, n + 1):
result *= i
return result
Этот код должен идти до того места, где мы захотим воспользоваться функцией factorial.
Первая строчка этого примера является описанием нашей функции. factorial — идентификатор, то есть имя нашей функции. После идентификатора в круглых скобках идет список параметров, которые получает наша функция. Список состоит из перечисленных через запятую идентификаторов параметров. В нашем случае список состоит из одной величины n. В конце строки ставится двоеточие.
Далее идет тело функции, оформленное в виде блока, то есть с отступом. Внутри функции вычисляется значение факториала числа n и оно сохраняется в переменной result. Функция завершается инструкцией
return result
которая завершает работу функции и возвращает значение переменной result. Инструкция return может встречаться в произвольном месте функции, ее исполнение завершает работу функции и возвращает указанное значение в место вызова. Если функция не возвращает значения, то инструкция return используется без возвращаемого значения, также в функциях, не возвращающих значения, инструкция return может отсутствовать.
Теперь мы можем использовать нашу функцию несколько раз. В этом примере мы трижды вызываем функцию factorial для вычисления трех факториалов: factorial(n), factorial(k), factorial(n-k).
n = int(input())
k = int(input())
print(factorial(n) // (factorial(k) * factorial(n - k)))
Мы также можем, например, объявить функцию binomial, которая принимает два целочисленных параметра n и k и вычисляет число сочетаний из n по k:
def binomial(n, k):
return factorial(n) // (factorial(k) * factorial(n - k))
Тогда в нашей основной программе мы можем вызвать функцию binomial для нахождения числа сочетаний:
print(binomial(n, k))
Вернемся к задаче нахождения наибольшего из двух или трех чисел. Функцию нахождения максимума из двух чисел можно написать так (впрочем, в Python есть и встроенная функция max):
def max(a, b):
if a > b:
return a
else:
return b
Теперь мы можем реализовать функцию max3, находящую максимум трех чисел:
def max3(a, b, c):
return max(max(a, b), c)
Функция max3 дважды вызывает функцию max для двух чисел: сначала, чтобы найти максимум из a и b, потом чтобы найти максимум из этой величины и c.