Как обращаться к переменным в Python?

«Как обращаться к переменным в Python?» — вопрос из категории Python, который задают на 33% собеседований Data Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В 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 — разные переменные) и должны начинаться с буквы или подчеркивания.