Ответ
В Python обращение к переменной — это просто использование ее имени. Интерпретатор ищет переменную в пространствах имен (областях видимости) по порядку: Local -> Enclosing -> Global -> Built-in (LEGB rule).
1. Базовое присваивание и доступ:
# Присваивание значения переменной
counter = 0
user_name = "Alice"
# Обращение к переменной для чтения значения
print(counter) # Вывод: 0
greeting = "Hello, " + user_name # Использование в выражении
print(greeting) # Вывод: Hello, Alice
# Изменение значения переменной
counter = counter + 1 # Или counter += 1
print(counter) # Вывод: 1
2. Области видимости (Scopes):
global_var = "I'm global"
def my_function():
local_var = "I'm local" # Локальная переменная функции
print(local_var) # OK: доступ внутри функции
print(global_var) # OK: доступ к глобальной переменной
my_function()
# print(local_var) # ОШИБКА: NameError - local_var не определена вне функции
print(global_var) # OK: доступ к глобальной переменной
3. Ключевое слово global (использовать с осторожностью):
Оно нужно, чтобы изменить глобальную переменную изнутри функции, а не просто прочитать ее.
count = 0
def increment():
global count # Объявляем, что будем работать с глобальной переменной count
count += 1
print(count) # 0
increment()
print(count) # 1
4. Ключевое слово nonlocal (для вложенных функций):
Позволяет изменить переменную из объемлющей (но не глобальной) области видимости.
def outer():
message = "outer"
def inner():
nonlocal message # Ссылаемся на переменную из объемлющей функции outer
message = "inner" # Меняем ее
inner()
print(message) # Вывод: "inner" (значение было изменено в inner)
outer()
5. Динамические имена переменных и доступ через словари:
Прямое создание переменных через строки (exec) — плохая практика. Вместо этого используйте словарь.
# Плохо (избегайте):
# exec(f"var_{i} = value")
# Хорошо:
data = {}
for i in range(3):
data[f"var_{i}"] = i * 10 # Создаем ключи 'var_0', 'var_1', 'var_2'
print(data["var_1"]) # Обращение по имени: 10
Важно: Имена переменных в Python чувствительны к регистру (myVar и myvar — разные переменные) и должны начинаться с буквы или подчеркивания.