Локальные и глобальные переменные

11.01.2023 0 Автор : Марина Николаевна
Локальные и глобальные переменные

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

Переменные, которые введены в основной программе, называются глобальными (общими). Их могут использовать все подпрограммы (процедуры и функции).

Часто бывает нужно ввести дополнительные переменные, которые будут использоваться только в подпрограмме. Такие переменные называют локальными (местными), к ним можно обращаться только  внутри этой подпрограммы, и остальные подпрограммы (а также основная программа) про них ничего «не знают»

Такой прием называется инкапсуляцией (от лат. «помещение в капсулу»)- таким образом ограничивается область видимости (область действия) переменной только той подпрограммой, где она действительно нужна

Составим программу , которая рисует на экране треугольник из символов высотой n (рисунок 1):

Рисунок 1

Как видно на рисунке 1, рисунок строится из n строк, причем в n-й по порядке строке выводится ровно n символов. Процедуру можно написать следующим образом:

def triiangle0(n):
for i in range (1, n+1):
print('0'*1)

Цикл по переменной построен так, чтобы значение переменной i (она принимает последовательно все целые значения от 1 до n) при каждом повторении цикла совпадало с длтной очередной цепочки символов «0».

Переменная i  — это локальная переменная, она введена и используется внутри процедуры. Обращаться к ней вне этой процедуры нельзя. В других процедурах также можно создать переменные с таким именем , но они будут связаны уже с другими областями памяти, т.е. это будут другие переменные.

Локальная переменная создается только при вызове процедуры. Как только работа процедуры будет закончена, все локальные переменные удалятся из памяти.

Рассмотрим другую процедуру:

def show():
print(i)

В процедуре  выводится значение i. Рассмотрим откуда берется эта переменная. Транслятор сначала ищет локальную переменную с таким именем, а ее нет. Потом начинает искать глобальную переменную: если такая переменная есть, на экран выводится его значение, если нет — будет выдано сообщение об ошибке.

Теперь рассмотрим другую процедуру:

def showLocal():
i = 2
print(i)

Даже если существует глобальная переменная i, в первой строке этой процедуры будет создана новая локальная переменная i, в первой  строке этой процедуры будет создана новая локальная переменная i, и ее значениеи ее значение (2)  появится на экране.

Глобальная переменная

Рассмотрим случай, когда в процедуре необходимо заменит глобальную переменную. 

Пусть переменная i — глобальная переменная. Её  значение задано в основной программе: 

 

i = 15

Изменим  ее значение в процедуре. Для этого нужно явно объявить, что она глобальная, используя команду global:

def showGlobal():
global i
i = 2
print (i)

Эта процедура работает с глобальной переменной i. Она присвоит ей новое значение 2 (это «увидят»  все остальные подпрограммы) и выведет его на экран.

Если забыть и не использовать команду glodal, то транслятор создаст новую локальную переменную и  будет с ней работать. Глобальная переменная при этом не изменится.

Необходимо писать процедуры, которые не обращаются к глобальным переменным (как говорят, не имеют побочных эффектов).

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

К сожалению, в языке программирования Python это не всегда выполнимо.