Руководство по обращению к переменным в программировании на Питоне

Раздел: Основы Python -> Вызовы

Переменная в Python это имя, которое ссылается на объект в памяти. Чтобы получить значение переменной, достаточно написать её имя в коде. Ниже рассмотрены основные способы обращения к переменным и их использования.

Базовое обращение к переменной

Как получить значение переменной после присваивания?

Самый простой способ присвоить значение и затем использовать переменную:

x = 10
print(x)  # 10

вызов класса python (вызов класса в python)

10

Python вызов переменной (вызов переменной в python)

Переменная x теперь ссылается на целое число 10. При обращении print(x) интерпретатор подставляет значение объекта.

Типичная ошибка: использование переменной до присваивания приводит к NameError.

print(y)  # NameError: name 'y' is not defined

код вызова python (код вызова в python)

Решение: всегда инициализировать переменную перед обращением.

Как присвоить значения нескольким переменным одновременно?

Множественное присваивание:

a, b = 1, 2
print(a, b)  # 1 2
1 2

Если количество переменных не совпадает с количеством значений, возникает ValueError.

a, b = 1, 2, 3  # ValueError: too many values to unpack

Как обменять значения двух переменных без временной?

Кортежная распаковка:

x, y = 5, 10
x, y = y, x
print(x, y)  # 10 5
10 5

Ошибка не возникает, если обе переменные определены.

Как использовать переменную в выражениях и функциях?

Переменную можно передавать в функции или включать в выражения:

name = "Alice"
age = 30
print(f"{name} is {age} years old")  # Alice is 30 years old
Alice is 30 years old

Если переменная не определена, возникает NameError. Если в f-строке используется неизвестное имя, ошибка будет в момент выполнения.

Как обратиться к глобальной переменной внутри функции?

По умолчанию внутри функции переменная считается локальной. Для доступа к глобальной используют global:

counter = 0
def increment():
    global counter
    counter += 1

increment()
print(counter)  # 1
1

Если забыть global, Python создаст новую локальную переменную, и глобальная не изменится.

Как проверить, существует ли переменная?

Используют globals() или locals(), либо конструкцию try/except:

try:
    print(z)
except NameError:
    print("Переменная z не определена")
Переменная z не определена

Не рекомендуется часто проверять существование переменной; лучше следить за инициализацией.

Как создать цепочку присваиваний?

Несколько переменных могут ссылаться на один объект:

a = b = c = 42
print(a, b, c)  # 42 42 42
42 42 42

Для изменяемых объектов (списки, словари) такое присваивание создает несколько имён для одного объекта; изменение через одно имя отразится на других.

x = y = []
x.append(1)
print(y)  # [1]

Расширенные примеры работы с переменными

Ниже приведены более сложные сценарии, демонстрирующие различные аспекты обращения к переменным в Python.

Области видимости по правилу LEGB

Python ищет имя в порядке: Local, Enclosing, Global, Built-in. Пример с вложенной функцией:

Пример
x = "global"
def outer():
    x = "enclosing"
    def inner():
        x = "local"
        print(x)
    inner()
    print(x)

outer()
print(x)
local
enclosing
global

Ошибочное использование nonlocal или global может привести к неожиданному изменению переменных. Внимательно выбирайте нужную область видимости.

Изменяемые и неизменяемые типы

При передаче в функцию изменяемого объекта (список) функция может изменить его содержимое:

Пример
def add_item(lst, item):
    lst.append(item)

my_list = [1, 2]
add_item(my_list, 3)
print(my_list)  # [1, 2, 3]
[1, 2, 3]

Для неизменяемых типов (числа, строки) создается новый объект при изменении.

Если требуется сохранить исходный список, следует передать его копию: my_list[:].

Идентификатор и оператор is

Переменные могут ссылаться на один объект. Оператор is проверяет идентичность, а не равенство:

Пример
a = [1, 2, 3]
b = a
c = a[:]
print(a is b)  # True
print(a is c)  # False
print(a == c)  # True
True
False
True

Путаница между == и is – частая ошибка. is следует использовать только для сравнения с None или для проверки синглтонов.

Распаковка с помощью оператора *

Python поддерживает распаковку произвольного количества элементов:

Пример
first, *middle, last = [1, 2, 3, 4, 5]
print(first)   # 1
print(middle)  # [2, 3, 4]
print(last)    # 5
1
[2, 3, 4]
5

Если в распаковке участвуют звёздочные переменные, их может быть только одна. Иначе SyntaxError.

Использование аннотаций типов

Аннотации не влияют на выполнение, но помогают инструментам статической проверки:

Пример
name: str = "Python"
version: float = 3.12
print(f"{name} {version}")  # Python 3.12
Python 3.12

Аннотации не защищают от присвоения значения другого типа; это лишь подсказка для разработчика.

Оператор морж (:=)

Позволяет присвоить значение переменной внутри выражения:

Пример
if (n := len([1, 2, 3, 4, 5])) > 3:
    print(f"Длина {n} больше 3")  # Длина 5 больше 3
Длина 5 больше 3

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

Вызов переменной в Python - comments

En
Python вызов переменной (python)