Переменные и присваивание в Python: полное руководство

Раздел: Основы Python -> Переменные и типы данных

Основы присваивания в Python

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

x = 42
name = 'Python'
pi = 3.14

примеры переменных в python (примеры переменных в python)

Переменной x присвоен объект целого числа 42, name - строка, pi - число с плавающей точкой. Тип переменной определяется типом объекта в момент присваивания.

Частая ошибка: использование пробела между именем переменной и оператором = допустимо, но некорректное имя (начинается с цифры, содержит дефис) вызовет синтаксическую ошибку. Также нельзя использовать зарезервированные слова (например, if, for).

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

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

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

Python присвоение значений переменной (присвоение значений переменным в python)

Слева и справа должны быть одинаковое количество элементов, иначе возникает ошибка ValueError. Это удобно для обмена значениями:

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

для создания переменной в python используется (создание переменной в python)

Если количество переменных не совпадает с количеством значений, Python вызовет ValueError: too many values to unpack или not enough values. Чтобы этого избежать, используют распаковку с *.

Как присвоить часть значений с помощью распаковки?

Оператор * (звёздочка) позволяет забрать оставшиеся элементы в одну переменную:

first, *middle, last = [1, 2, 3, 4, 5]
print(first)   # 1
print(middle)  # [2, 3, 4]
print(last)    # 5

Распаковка работает с любыми итерируемыми объектами (списки, кортежи, строки). Это удобно при обработке данных переменной длины.

Нельзя использовать более одной звёздочки в левой части - это вызовет SyntaxError. Также звёздочка не может быть единственной переменной (нужно минимум две).

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

Цепочка присваивания (chained assignment) связывает несколько имён с одним объектом:

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

Все три переменные ссылаются на один и тот же объект (число 0). Для неизменяемых типов (int, str, tuple) это безопасно, но для изменяемых (list, dict) изменение через одну переменную повлияет на остальные.

Пример проблемы с изменяемым объектом:

x = y = []
x.append(1)
print(y)  # [1] - y тоже изменился

Чтобы создать независимые копии, используйте разные присваивания или copy().

Как присвоить значение внутри выражения?

Оператор морж (:=) появился в Python 3.8 и позволяет присвоить значение переменной в середине выражения, возвращая его:

if (n := len('hello')) > 3:
    print(f'Длина {n} больше 3')

Переменная n получает значение 5, и это значение сразу используется в условии. Морж полезен для избежания дублирования кода, особенно в циклах и списковых включениях.

Ошибка: попытка использовать := в местах, где не допускается выражение (например, в левой части присваивания). Также важно ставить скобки в сложных выражениях для ясности.

Как изменить переменную, используя её текущее значение?

Операторы присваивания на месте (+=, -=, *= и др.) объединяют операцию и присваивание:

count = 10
count += 5
print(count)  # 15

message = 'Hello'
message += ', World!'
print(message)  # Hello, World!

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

Списки: a += [1] меняет исходный список, а a = a + [1] создаёт новый. Это важно понимать, чтобы не получить неожиданного поведения.

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

Присваивание может изменять содержимое изменяемых объектов:

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

my_dict = {'key': 'value'}
my_dict['new_key'] = 42
print(my_dict)  # {'key': 'value', 'new_key': 42}

Это не создаёт новую переменную, а модифицирует существующий объект. Аналогично можно присваивать срезу списка, менять атрибуты объекта и т.д.

Ошибка: попытка присвоить значение несуществующему индексу вызовет IndexError; несуществующему ключу словаря - наоборот, ключ добавится (если словарь изменяемый). Для кортежа (неизменяемого) присвоить элемент нельзя - TypeError.

Дополнительные примеры присваивания

Пример вложенной распаковки кортежа:

Пример
data = ('Alice', 25, ('Moscow', '101000'))
name, age, (city, code) = data
print(name)  # Alice
print(city)  # Moscow
Alice
Moscow

Присваивание с помощью распаковки в цикле for:

Пример
pairs = [(1, 'a'), (2, 'b'), (3, 'c')]
for number, letter in pairs:
    print(f'{number}: {letter}')
1: a
2: b
3: c

Присваивание с одновременным перебором индексов через enumerate:

Пример
colors = ['red', 'green', 'blue']
for index, color in enumerate(colors):
    print(index, color)
0 red
1 green
2 blue

Присваивание с использованием оператора := в списковом включении:

Пример
import math
[x for x in [4, -9, 16] if (root := math.sqrt(abs(x))) > 3]
# Результат: [16] (корень 4 равен 2, 9 -> 3, 16 -> 4)
[16]

Присваивание атрибутам объекта:

Пример
class Point:
    pass

p = Point()
p.x = 10
p.y = 20
print(p.x, p.y)  # 10 20
10 20

Присваивание срезу списка (замена нескольких элементов):

Пример
items = [1, 2, 3, 4, 5]
items[1:3] = [10, 20]
print(items)  # [1, 10, 20, 4, 5]
[1, 10, 20, 4, 5]

Присваивание с использованием функции zip и распаковки:

Пример
keys = ['a', 'b', 'c']
values = [1, 2, 3]
combined = dict(zip(keys, values))
print(combined)  # {'a': 1, 'b': 2, 'c': 3}
{'a': 1, 'b': 2, 'c': 3}

Пример с присваиванием через globals() (не рекомендуется, но возможно):

Пример
globals()['new_var'] = 100
print(new_var)  # 100
100

Присвоение значений переменным в Python - comments

En
Python присвоение значений переменной (python)