Введение в Python (Красота) - страница 17

В Python две базовых области видимости переменных:

* Глобальные переменные

* Локальные переменные

Переменные объявленные внутри тела функции имеют локальную область видимости, те что объявлены вне какой-либо функции имеют глобальную область видимости.

Это означает, что доступ к локальным переменным имеют только те функции, в которых они были объявлены, в то время как доступ к глобальным переменным можно получить по всей программе в любой функции.

Например:


>| # глобальная переменная age

>| age = 44

>| def info():

>| print age # Печатаем глобальную переменную age

>|

>| def local_info():

>| age = 22 # создаем локальную переменную age

>| print age

>|

>| info() # напечатает 44

>| local_info() # напечатает 22


Важно помнить, что для того чтобы получить доступ к глобальной переменной, достаточно лишь указать ее имя. Однако, если перед нами стоит задача изменить глобальную переменную внутри функции - необходимо использовать ключевое слово global.

Например:


>| # глобальная переменная age

>| age = 13

>|

>| # функция изменяющая глобальную переменную

>| def get_older():

>| global age

>| age += 1

>| print age # напечатает 13

>| get_older() # увеличиваем age на 1

>| print age # напечатает 14


Рекурсия

Рекурсией в программировании называется ситуация, в которой функция вызывает саму себя. Классическим примером рекурсии может послужить функция вычисления факториала числа.

Напомним, что факториалом числа, например, 5 является произведение всех натуральных (целых) чисел от 1 до 5. То есть, 1 * 2 * 3 * 4 * 5

Рекурсивная функция вычисления факториала на языке Python будет выглядеть так:


>| def fact(num):

>| if num == 0:

>| return 1# По договоренности факториал нуля равен единице

>| else:

>| return num * fact(num - 1)

>| # возвращаем результат произведения num и результата возвращенного функцией fact(num - 1)


Однако следует помнить, что использование рекурсии часто может быть неоправданным. Дело в том, что в момент вызова функции в оперативной памяти компьютера резервируется определенное количество памяти, соответственно чем больше функций одновременно мы запускаем - тем больше памяти потребуется, что может привести к переполнению стека (stack overflow) и программа завершится аварийно, не так как предполагалось. Учитывая это, там где это возможно, вместо рекурсии лучше применять циклы.

Рецепт создания функции в Python

Существует следующий алгоритм - рекомендация по созданию функции в Python. Например, мы создаем функцию вычисления площади прямоугольника.

1. Начинать следует с примеров того, что делает функция, и подобрать подходящее название. В нашем случае это будет выглядеть так: