Функции в Питоне.

1. Функции в Питоне.

Ранее мы писали программы, вычисляющую число сочетаний из n элементов по k по данным n и k, то есть вычисляющую n!/k!(n-k)!. В этой программе необходимо три раза вычислять факториал, то есть трижды повторять одну и ту же последовательность действий. Эту последовательность лучше не повторять в программе трижды, а оформить в виде отдельной функции, которая по данной величине n вычисляет значение n!, а затем трижды использовать эту функцию. Это приводит к уменьшению размера исходного кода программы, упрощению ее разработке и улучшению читаемости.

В языке Питон функция, вычисляющая n! может выглядеть следующим образом:

     def factorial(n):
       f=1
       for i in range(1,n+1):
         f=f*i
       return f

Первая строка содержит объявление функции, состоящее из ключевого слова def (аббревиатура от define – определять), идентификатор функции и в скобках – список параметров, получаемых функцией. В нашем случае функция получает единственный параметр – число n. Завершается определение функции двоеточием. Далее идет тело функции, как и любой блок, выделенной при помощи отступа. В теле нашей фунции мы объявляем переменную f, присвоив ей первоначальное значение, равное единице, затем в цикле умножаем значение f на все числа от 1 до n. После окончание цикла наша функция возвращает значение f при помощи инструкции return.

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

     print "Введите значения n и k:"
     n=input()
     k=input()
     print factorial(n)/(facorial(k)*factorial(n-k))

Функции могут принимать несколько параметров, тогда их необходимо перечислять через запятую. Также функции могут вызывать другие функции (и даже сами себя). Например, мы можем реализовать функцию binomial, принимающую два параметра n и k, возвращающую число сочетаний из n по k и трижды вызывающую функцию factorial:

     def binomial(n,k):
       return factorial(n)/(factorial(k)*factorial(n-k))

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

Функция может не принимать ни одного параметра, тогда список ее параметров будет пустым (и будет иметь вид пары круглых скобок).