Переменные и присваивание в 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 3Python присвоение значений переменной (присвоение значений переменным в 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) # MoscowAlice 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 2010 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) # 100100