:
>| def fact(num):
>| if num == 0:
>| return 1# По договоренности факториал нуля равен единице
>| else:
>| return num * fact(num - 1)
>| # возвращаем результат произведения num и результата возвращенного функцией fact(num - 1)
Однако следует помнить, что использование рекурсии часто может быть неоправданным. Дело в том, что в момент вызова функции в оперативной памяти компьютера резервируется определенное количество памяти, соответственно чем больше функций одновременно мы запускаем - тем больше памяти потребуется, что может привести к переполнению стека (stack overflow) и программа завершится аварийно, не так как предполагалось. Учитывая это, там где это возможно, вместо рекурсии лучше применять циклы.
Существует следующий алгоритм - рекомендация по созданию функции в Python. Например, мы создаем функцию вычисления площади прямоугольника.
1. Начинать следует с примеров того, что делает функция, и подобрать подходящее название. В нашем случае это будет выглядеть так:
>| # На данном этапе мы еще не указываем имена переменных
>| def rectangle_area_finder( ):
>| """
>| >>> rectangle_area_finder(3, 5)
>| 15
>| >>> rectangle_area_finder(17.2, 6)
>| 103.2
>| """
2. Указать типы данных, которые принимает функция и тип данных, который она возвращает
>| # функция принимает два числа, а возвращает одно
>| def rectangle_area_finder( ):
>| """
>| (num, num) -> num
>| >>> rectangle_area_finder(3, 5)
>| 15
>| >>> rectangle_area_finder(17.2, 6)
>| 103.2
>| """
3. Подобрать подходящие названия для переменных
>| # Поскольку это математическая функция нам вполне подойдут имена a и b
>| def rectangle_area_finder(a, b):
>| """
>| (num, num) -> num
>| >>> rectangle_area_finder(3, 5)
>| 15
>| >>> rectangle_area_finder(17.2, 6)
>| 103.2
>| """
4. Написать краткое, но содержательное описание функции
>| def rectangle_area_finder(a, b):
>| """
>| (num, num) -> num
>| Returns an area of a rectangle with given sides a and b.
>| >>> rectangle_area_finder(3, 5)
>| 15
>| >>> rectangle_area_finder(17.2, 6)
>| 103.2
>| """
5. Написать собственно тело функции
>| def rectangle_area_finder(a, b):
>| """
>| (num, num) -> num
>| Returns an area of a rectangle with given sides a and b.
>| >>> rectangle_area_finder(3, 5)
>| 15
>| >>> rectangle_area_finder(17.2, 6)
>| 103.2
>| """
>| return a * b
6. Функция готова! Осталось вызвать ее с указанными в примерах аргументами
Как видно, при вызове команды help() с именем нашей функции в качестве аргумента мы получаем написанную нами документацию.
Сопровождайте ваши функции качественной документацией и программисты, которые будут работать с вашим кодом после вас будут вам благодарны.
Функциональное программирование в Python: lambda, zip, filter, map reduce
Published: 09 March 2017
Функциональным называется такой подход к процессу программирования, в программа рассматривается как вычисление математических функций, при этом не используются состояния и изменяемые объекты. Как правило, когда говорят о элементах функционального программировании в Python, то подразумеваются следующие функции: