Изучаем переменные Python: присваивание, типы, область видимости

Раздел: Прочее -> типы данных и переменные

Основы работы с переменными в Python

Переменная в Python представляет собой имя, которое ссылается на объект в памяти. Присваивание выполняется оператором =. В отличие от статически типизированных языков, Python использует динамическую типизацию: тип переменной определяется автоматически на основе присвоенного значения и может изменяться в ходе выполнения программы.

message = 'Привет, мир!'
number = 42
pi = 3.14159

Python var (переменная в python)

После выполнения этих строк переменная message будет ссылаться на строку, number - на целое число, pi - на число с плавающей точкой. Тип можно проверить функцией type().

Типичная ошибка:

Попытка использовать переменную до присваивания приводит к NameError. Например:

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

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

Множественное присваивание позволяет установить разные значения для нескольких переменных одновременно:

a, b, c = 1, 'Python', 3.14

Переменная a получает 1, b - строку 'Python', c - 3.14. Количество переменных должно совпадать с количеством значений, иначе возникнет ValueError.

Ошибка: несоответствие числа переменных и значений.

x, y = 1, 2, 3  # ValueError: too many values to unpack

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

В Python обмен реализуется одним выражением:

a, b = 5, 10
a, b = b, a
print(a, b)  # 10 5

Сначала вычисляется кортеж (b, a), затем он распаковывается в a и b. Это безопасно и не требует дополнительной памяти.

Как создать «константу» в Python?

В языке нет встроенных констант, но по соглашению имена констант пишут заглавными буквами:

MAX_SIZE = 100
DATABASE_URL = 'postgres://...'

Это не защищает от изменения, но сообщает другим разработчикам, что значение не должно меняться. Для полной защиты можно использовать typing.Final (Python 3.8+) или модуль enum.

Как проверить тип переменной в Python?

Используйте встроенную функцию type() или isinstance() для проверки принадлежности к типу:

value = 42
print(type(value))  # <class 'int'>
print(isinstance(value, int))  # True

Как работает ссылочная модель переменных?

В Python переменная - это ссылка на объект. При присваивании b = a обе переменные указывают на один объект. Если объект изменяемый (список, словарь), изменения через одну переменную отразятся на другой:

list1 = [1, 2, 3]
list2 = list1
list2.append(4)
print(list1)  # [1, 2, 3, 4]

Для копирования изменяемых объектов используйте copy.copy() или срез list1[:].

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

Эти примеры демонстрируют менее очевидные аспекты переменных в Python.

Распаковка кортежа и использование подчеркивания

При множественном присваивании можно игнорировать некоторые значения с помощью _:

Пример
x, _, y = (1, 2, 3)
print(x, y)  # 1 3

Результат: 1 3. Переменная _ не хранит значение, она используется как соглашение.

Присваивание с распаковкой и звездочкой

Оператор * собирает оставшиеся элементы в список:

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

Результат соответствует комментариям. Если элементов недостаточно, возникает ошибка.

Переменные в циклах и область видимости

Переменная, созданная внутри цикла, остается доступной после его завершения:

Пример
for i in range(3):
    a = i
a  # 2 (последнее значение)

Результат: 2. Это может привести к неожиданностям, если не учитывать, что i и a остаются в глобальной области (если цикл выполняется на глобальном уровне).

Использование ключевого слова global

Для изменения глобальной переменной внутри функции необходимо объявление global:

Пример
count = 0
def increment():
    global count
    count += 1
increment()
print(count)  # 1

Результат: 1. Без global внутри функции создается локальная переменная, и глобальная не изменяется.

Переменные как ссылки: пример с id()

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

Пример
a = 256
b = 256
print(id(a), id(b))  # одинаковые идентификаторы (для малых целых чисел Python кэширует объекты)

c = 257
d = 257
print(id(c), id(d))  # разные, так как число больше 256

Результат (примерный): 140705123456 140705123456 и 140705123789 140705123888. Для чисел от -5 до 256 интерпретатор использует пул объектов.

Переменная в Python - comments

En
Python var (python)