- 7 августа 2025
- 5 минут
- 317
Python: Классификация переменных на локальные и глобальные
Статью подготовили специалисты образовательного сервиса Zaochnik.
В Python переменные могут делиться на локальные и глобальные в зависимости от их области видимости.
Глобальные переменные в Python
Внутри функции можно ссылаться на переменные, которые были объявлены за пределами этой функции.
```python
def func1():
print(a)
a = 1 # Глобальная переменная
func1()
```
В данном примере переменной “а” присваивается значение “1”, и при выводе значения функции - программа выводит “1”, даже если выше функции переменная не инициализирована. При вызове функции значение переменной уже установлено, что позволяет выводить его на экран.
Переменные, которые объявлены вне функции, но доступны внутри нее, считаются глобальными.
Локальные переменные в Python
Однако, если переменная инициализируется в рамках кода функции, тогда использовать данную переменную за пределами функции не получится.
```python
def func2():
a = 1 # Локальная переменная
func2()
print(a)
```
В этом случае мы получим сообщение об ошибке “NameError: name 'a' is not defined”.
Переменные, объявленные в функции, называются локальными.
Локальные переменные создаются в пределах функции и доступны только внутри нее. После завершения работы функции они удаляются.
Интересный результат получится, если попытаться внести изменение в значение глобальной переменной в функции:
```python
def func3():
a = 1 # Локальная переменная
print(a)
a = 0
func3()
print(a)
```
На экран будут выведены числа “1” и “0”. То есть, хотя переменная a изменилась внутри функции, за ее пределами она осталась без изменений! Это сделано для "защиты" глобальных переменных от случайных модификаций в функции (например, если функция вызывается в цикле, и переменная используется для управления циклом, то эти переменные должны различаться). Если в функции изменяется значение переменной, именем которой также является глобальная переменная, то она становится локальной, и ее изменение не затрагивает глобальную переменную с тем же именем.
Python воспринимает переменную как локальную, если внутри функции есть хотя бы одно выражение, изменяющее ее значение (это может быть оператор присваивания, например `=`, `+=`, и т.д., или употребление данной переменной в качестве параметра цикла). Переменная считается локальной и недоступна до инициализации. Даже если инструкция, модифицирующая переменную, не выполняется, Python по-прежнему считает ее локальной.
```python
def func4():
print(a)
if False:
a = 0
a = 1
func4()
```
В результате возникнет ошибка “UnboundLocalError: local variable 'a' referenced before assignment”. В этой функции идентификатор становится локальной переменной, поскольку присутствует оператор, модифицирующий переменную a, даже если он не исполняется (интерпретатор это не может определить). Вывод переменной приводит к попытке обращения к неинициализированной локальной переменной.
Изменение значения глобальной переменной в Python
Для возможности изменить функцией значения глобальной переменной, переменную необходимо объявить глобальной с помощью ключевого слова `global`:
```python
def func5():
global a
a = 1
print(a)
a = 0
func5()
print(a)
```
В результате такого примера на экран будет выведено “1”, по причине объявления переменной как глобальной, поэтому изменения значения переменной внутри функции также отражается за ее пределами.
Рекомендуется избегать изменения глобальных переменных внутри функций. В случаях, когда функция все же должна изменить некоторую переменную, это лучше сделать, возвращая значение из функции.
Если необходимо вернуть несколько значений, функция может вернуть кортеж:
return (a, b).
В подобном случае результат вызова функции необходимо присваивать кортежу:
(n, m) = f(a, b).