len
, print
).global
. Для изменения переменной во внешней области видимости используется nonlocal
(в Python 3). Без них, присваивание внутри функции создает локальную переменную. Python ищет переменные в областях видимости в порядке LEGB (Local, Enclosing, Global, Built-in).
В Python существуют разные области видимости, которые определяют, где переменная может быть доступна и использована. Основные области видимости:
print
, len
, True
).Python использует правило LEGB (Local, Enclosing, Global, Built-in) для поиска переменной. Когда вы используете имя переменной, Python сначала ищет его в локальной области видимости, затем во внешней, затем в глобальной и, наконец, во встроенной.
Как работать с переменными в разных областях видимости:
Локальные переменные используются для хранения данных, относящихся только к конкретной функции. Они "живут" только во время выполнения функции.
def my_function():
x = 10 # Локальная переменная
print(x)
my_function() # Выводит 10
# print(x) # Вызовет ошибку NameError, т.к. x не существует вне функции
Глобальные переменные можно использовать для хранения данных, которые должны быть доступны из разных частей программы. Однако, важно помнить, что изменение глобальных переменных внутри функции требует явного объявления с использованием ключевого слова global
.
x = 5 # Глобальная переменная
def my_function():
global x # Указываем, что мы хотим изменить глобальную переменную x
x = 20
print("Внутри функции:", x)
my_function() # Выводит "Внутри функции: 20"
print("Вне функции:", x) # Выводит "Вне функции: 20"
Без использования global
внутри функции, Python создаст новую локальную переменную с тем же именем, не изменяя глобальную переменную.
Ключевое слово nonlocal
используется для доступа и изменения переменных во внешней (enclosing) области видимости. Это полезно при работе с вложенными функциями.
def outer_function():
x = 10
def inner_function():
nonlocal x # Указываем, что мы хотим изменить переменную x во внешней функции
x = 30
print("Внутри внутренней функции:", x)
inner_function()
print("Внутри внешней функции:", x)
outer_function()
# Вывод:
# Внутри внутренней функции: 30
# Внутри внешней функции: 30
Важно: Злоупотребление глобальными переменными может привести к сложному и трудно отлаживаемому коду. Старайтесь использовать их только когда это действительно необходимо. nonlocal
также следует использовать осторожно, чтобы не усложнять структуру кода.