Что такое переменная в Python
Переменная — это имя, которое указывает на значение в памяти компьютера. Когда программа встречает это имя, она подставляет вместо него сохранённое значение, как подставляют число вместо буквы в формуле.
imya = "Лиса"
lapy = 4
print(imya, "бегает на", lapy, "лапах")
Лиса бегает на 4 лапах
Здесь созданы две переменные: imya хранит текст, lapy — число. В отличие от многих языков, в Python переменную не нужно заранее объявлять и указывать её тип: она появляется в момент первого присваивания. Официальная документация Python описывает это так: имя связывается со значением, а тип определяется самим значением[1].
Зачем вообще нужны переменные? Без них программа не умеет ничего запоминать. Счёт в игре, ответ пользователя, промежуточный результат вычислений — всё это хранится в переменных. По федеральной образовательной программе переменные и присваивание открывают раздел программирования в 8 классе[2]: на них держатся все следующие темы, от условий до циклов.
Переменные в Python понадобятся и на экзамене. По материалам ФИПИ, в задании 16 ОГЭ нужно написать программу на универсальном языке: она читает числа, хранит промежуточные результаты — сумму, количество, максимум — и выводит ответ. Каждое из этих чисел живёт в своей переменной, и если путаться в присваивании, задачу не решить даже при знании циклов.
Не путать: в Scratch переменную создают кнопкой «Создать переменную» и меняют блоками «задать» и «изменить на». Идея та же, только запись другая — сравните с уроком о переменных в Scratch.
Присваивание: что значит знак =
Знак = в Python — это не «равно», а команда присваивания: вычисли то, что справа, и запиши результат в переменную слева. Поэтому запись читается справа налево.
x = 5
y = x + 3
x = 10
print(x, y)
10 8
Почему y равен 8, а не 13? В момент присваивания y = x + 3 в x лежало 5, и Python вычислил 8. Позже x поменялся, но y об этом «не знает»: переменная хранит готовое значение, а не формулу. Это частый источник путаницы у тех, кто привык к таблицам, где ячейки пересчитываются сами.
Слева от знака = всегда стоит имя переменной, справа — значение или выражение. Запись 5 = x не имеет смысла и вызовет SyntaxError. Для сравнения на равенство в Python есть отдельный оператор из двух знаков: ==.
Python умеет присваивать сразу несколько переменных. Запись a = b = 0 кладёт ноль в обе переменные, а shirina, vysota = 800, 600 раскладывает два значения по двум именам слева направо.
Как называть переменные: правила и советы
Имя переменной может состоять из букв, цифр и знака подчёркивания, но не может начинаться с цифры и совпадать с ключевым словом языка. Большие и маленькие буквы различаются: Ochki и ochki — две разные переменные.
| Имя | Можно? | Почему |
ochki | да | Латинские буквы — лучший вариант |
ochki_igroka | да | Слова разделены подчёркиванием (snake_case) |
level2 | да | Цифра не в начале |
2level | нет | Начинается с цифры — SyntaxError |
moi ochki | нет | Пробел внутри имени запрещён |
class | нет | Ключевое слово языка |
print | технически да | Но встроенная функция перестанет работать |
Руководство по стилю PEP 8 советует писать имена маленькими буквами и разделять слова подчёркиванием: ochki_igroka, а не OchkiIgroka[3]. Имена должны объяснять, что хранится внутри: cena понятнее, чем c, а kolichestvo_zhiznej — чем k2. Однобуквенные имена допустимы для коротких счётчиков вроде i в цикле.
Python 3 разрешает и русские буквы в именах: счёт = 5 сработает. Но на практике так почти не пишут. Если перепутать раскладку и набрать русскую «с» вместо латинской c, получатся два разных имени, которые выглядят одинаково, и найти такую ошибку очень трудно. Полный список запретных слов — в справочнике ключевых слов Python.
Изменение значения переменной
Чтобы изменить переменную, ей присваивают новое значение; старое при этом пропадает. Чаще всего новое значение вычисляют из старого: ochki = ochki + 10 — возьми текущий счёт, прибавь 10 и запиши обратно.
ochki = 0
ochki = ochki + 10
ochki += 5
ochki *= 2
print(ochki)
30
Короткие формы вроде += описаны в документации Python как составное присваивание: они делают то же самое, что и длинная запись, но их проще читать. Вот основные.
| Короткая запись | Длинная запись | Если было x = 12 |
x += 3 | x = x + 3 | 15 |
x -= 3 | x = x - 3 | 9 |
x *= 3 | x = x * 3 | 36 |
x //= 5 | x = x // 5 | 2 |
x %= 5 | x = x % 5 | 2 |
В Python нет записи x++, привычной по C++ и Java: она вызовет SyntaxError. Увеличить переменную на единицу можно только через x += 1. Изменять можно и тип значения: если в переменной было число, ей можно присвоить строку. Python это разрешает, но в учебных программах такие превращения обычно запутывают, поэтому лучше держать в одной переменной данные одного вида.
Как поменять местами значения двух переменных
Чтобы поменять переменные в Python местами, достаточно 1 строки: a, b = b, a. Справа сначала собирается пара значений, а потом она раскладывается по именам слева.
a = "чай"
b = "сок"
a, b = b, a
print(a, b)
сок чай
В большинстве других языков так не получится, и там используют третью, временную переменную. Этот способ полезно знать: его спрашивают на уроках и он встречается в алгоритмах сортировки.
a = 3
b = 8
vremennaya = a
a = b
b = vremennaya
print(a, b)
Почему нельзя просто написать a = b, а затем b = a? После первой строки старое значение a пропадёт, и в обеих переменных окажется 8. Временная переменная работает как пустой стакан, когда нужно поменять местами чай и сок в двух чашках.
Типичные ошибки с переменными
Большинство ошибок новичков с переменными — это 4 ситуации: обращение к ещё не созданному имени, опечатка в имени, путаница = и == и перезапись встроенной функции.
| Код с ошибкой | Что скажет Python | Как исправить |
print(schet) до присваивания | NameError: name 'schet' is not defined | Сначала присвоить значение |
ochki = 0, потом print(Ochki) | NameError | Проверить регистр букв |
if x = 5: | SyntaxError | Для сравнения писать == |
print = 3, потом print(1) | TypeError: 'int' object is not callable | Не называть переменные именами функций |
Самая частая ошибка, которую дают переменные в Python, — NameError. Python выполняет строки сверху вниз, и если имя встречается раньше, чем ему что-то присвоено, интерпретатор его просто не знает. Подробный разбор с примерами есть на странице об ошибке NameError.
Задачи с автопроверкой
Тренажёр вверху страницы содержит 7 задач: выберите номер, напишите код в редакторе и нажмите «✓ Проверить». Программа запустит решение на нескольких тестах, справа появится список тестов, а при ошибке — «Ожидалось» и «Получилось».
Задачи идут от простого к сложному: приветствие, прибавление, обмен значениями, накопление суммы. Если застряли, нажмите «Подсказка», а «Показать решение» оставьте на крайний случай. Кнопка «Сбросить» вернёт заготовку. Самопроверка без подглядывания закрепляет знания лучше перечитывания — это показало исследование Roediger и Karpicke[4]. Ещё больше упражнений — в подборке задач на переменные, а про то, какие бывают значения, — в уроке о типах данных.
Когда отдельная переменная не нужна
Отдельное имя не нужно, если значение используется 1 раз и сразу понятно из кода. В этих 4 случаях лишние имена только удлиняют программу.
- Число нужно 1 раз.
print(2 * 60)понятнее, чем три строки с промежуточными именами. - Нужно хранить 30 оценок. Тридцать имён ocenka1…ocenka30 неудобны — для этого есть списки.
- Значение уже лежит в 2 местах. Копия в третьей переменной легко «разойдётся» с оригиналом.
- Нужна константа вроде 3.14159. Для числа пи есть готовое math.pi, придумывать своё имя не стоит.
Миф: «Знак = в программировании означает равенство, как в математике». Это не подтверждается: в Python это команда записи значения, и запись
x = x + 1, бессмысленная в алгебре, в программе совершенно нормальна.
Миф: «Переменная хранит формулу и пересчитывается сама». Такого механизма в Python не существует: в переменную записывается готовый результат, и он меняется только при новом присваивании.
Чего делать нельзя
Нельзя использовать имя до того, как ему присвоено значение: Python читает программу сверху вниз. Вот 6 правил, которые избавят от большинства ошибок.
- Нельзя начинать имя с цифры.
1igrok— ошибка,igrok1— правильно. - Не следует называть переменные print, input, sum, list, str. Встроенная функция перестанет работать до перезапуска.
- Не стоит давать однобуквенные имена всему подряд. Через неделю никто не вспомнит, что хранится в q.
- Нельзя путать = и ==. Первое записывает значение, второе сравнивает.
- Не стоит смешивать русские и латинские буквы в именах. Одинаковые на вид имена окажутся разными.
- Не следует писать x++. В Python такой записи нет, используйте x += 1.
Источники
[1] The Python Tutorial (официальная документация Python 3). Python Software Foundation.
[2] Приказ Минпросвещения России от 18.05.2023 № 370 «Об утверждении федеральной образовательной программы основного общего образования».
[3] van Rossum G., Warsaw B., Coghlan N. PEP 8 — Style Guide for Python Code. Python Software Foundation, 2001.
[4] Roediger H. L., Karpicke J. D. Test-enhanced learning: Taking memory tests improves long-term retention // Psychological Science. 2006. Vol. 17, № 3. P. 249–255.
Вопросы и ответы
Сколько переменных можно создать в одной программе?
Сколько угодно — ограничивает только память компьютера. В учебной программе обычно хватает 3–10 имён.
Можно ли изменить тип переменной?
Да: Python разрешает присвоить числу строку. Но держать в одном имени данные разных видов неудобно, поэтому так лучше не делать.
Что будет, если присвоить значение ещё раз?
Старое значение заменится новым и пропадёт. Если оно ещё понадобится, сохраните его заранее под другим именем.
Почему переменные в Python не надо объявлять?
Имя появляется при первом присваивании, а вид данных Python определяет сам по значению. В C++ и Паскале, наоборот, сначала указывают тип.
Как удалить переменную?
Командой del, например del ochki. После этого обращение к имени вызовет NameError. В учебных задачах это почти никогда не требуется.
Нужно ли писать имена по-английски?
Не обязательно. Можно латиницей по-русски, например ochki или cena. Главное — чтобы имя было понятным и без пробелов.