Руководство по обращению к переменным в программировании на Питоне
Переменная в 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 21 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 510 5
Ошибка не возникает, если обе переменные определены.
Как использовать переменную в выражениях и функциях?
Переменную можно передавать в функции или включать в выражения:
name = "Alice"
age = 30
print(f"{name} is {age} years old") # Alice is 30 years oldAlice is 30 years old
Если переменная не определена, возникает NameError. Если в f-строке используется неизвестное имя, ошибка будет в момент выполнения.
Как обратиться к глобальной переменной внутри функции?
По умолчанию внутри функции переменная считается локальной. Для доступа к глобальной используют global:
counter = 0
def increment():
global counter
counter += 1
increment()
print(counter) # 11
Если забыть global, Python создаст новую локальную переменную, и глобальная не изменится.
Как проверить, существует ли переменная?
Используют globals() или locals(), либо конструкцию try/except:
try:
print(z)
except NameError:
print("Переменная z не определена")Переменная z не определена
Не рекомендуется часто проверять существование переменной; лучше следить за инициализацией.
Как создать цепочку присваиваний?
Несколько переменных могут ссылаться на один объект:
a = b = c = 42
print(a, b, c) # 42 42 4242 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) # TrueTrue False True
Путаница между == и is – частая ошибка. is следует использовать только для сравнения с None или для проверки синглтонов.
Распаковка с помощью оператора *
Python поддерживает распаковку произвольного количества элементов:
first, *middle, last = [1, 2, 3, 4, 5]
print(first) # 1
print(middle) # [2, 3, 4]
print(last) # 51 [2, 3, 4] 5
Если в распаковке участвуют звёздочные переменные, их может быть только одна. Иначе SyntaxError.
Использование аннотаций типов
Аннотации не влияют на выполнение, но помогают инструментам статической проверки:
name: str = "Python"
version: float = 3.12
print(f"{name} {version}") # Python 3.12Python 3.12
Аннотации не защищают от присвоения значения другого типа; это лишь подсказка для разработчика.
Оператор морж (:=)
Позволяет присвоить значение переменной внутри выражения:
if (n := len([1, 2, 3, 4, 5])) > 3:
print(f"Длина {n} больше 3") # Длина 5 больше 3Длина 5 больше 3
Морж может снизить читаемость; его стоит использовать только в очевидных случаях, например, в условиях циклов.