Переменные — чтобы запомнить
Раздел 1.2 · ~30 мин · draft
Чтобы программа запомнила
В прошлом уроке print печатал значение, и на этом всё заканчивалось:
напечатал — забыл. Но настоящая программа должна помнить. Считала возраст
один раз — и дальше пользуется им хоть десять раз, не пересчитывая.
Чтобы запомнить значение, его надо как-то назвать. Представь, что ты вешаешь
на значение бумажку с именем: вот это число теперь зовётся age, а вот этот
текст — name. Дальше зовёшь значение по имени — и Python приносит его.
Имя-ярлык, которым ты подписал значение, и есть переменная. Разберёмся,
как их создавать.
Подписать значение именем
Чтобы создать переменную, пишешь имя, знак = и значение. Слева — имя,
справа — то, что под этим именем хочешь запомнить.
В выводе появится:
25
Разберём по шагам. Строка age = 25 говорит Python: «запомни число 25
под именем age». Это называется присвоить значение переменной.
После этой строки имя age живёт в программе и хранит 25. Во второй
строке мы зовём age по имени внутри print — и Python подставляет туда
то, что запомнил. В прошлом уроке аргументом print был текст в кавычках,
теперь — имя переменной: тот же аргумент, просто Python сначала подставляет
вместо него запомненное значение.
Запоминать можно не только числа. Текст — точно так же, в кавычках:
В выводе:
Алиса
Справа от = может стоять что угодно из того, что ты уже умеешь печатать:
число, текст в кавычках. Слева — всегда имя, под которым это запомнится.
Звать по имени
Раз значение подписано именем, дальше с ним работаешь через это имя. Один раз запомнил — пользуешься сколько надо:
В выводе:
Привет, Алиса
Алиса
Имя name сработало дважды, и оба раза Python подставил 'Алиса'. Вот зачем
переменные: запомнил значение один раз — зовёшь его сколько угодно.
Тут важный момент, на котором спотыкаются почти все. Сравни два вызова:
В выводе:
25
age
Видишь разницу? print(age) — без кавычек — печатает значение
переменной, число 25. А print('age') — в кавычках — печатает сам
текст age, три буквы. Кавычки решают всё: без них Python ищет имя
и приносит запомненное значение, в кавычках — печатает буквы как есть.
= — это не «равно»
Знак = в Python читается не как «равно» из математики. В математике
age = 25 означало бы «age равно 25» — утверждение, констатацию факта.
В Python = — это действие: «возьми то, что справа, и запомни под
именем слева». Стрелка справа налево, а не знак равенства.
Из-за этого работают штуки, которые в математике выглядели бы абсурдно:
В выводе:
200
В математике score = 100 и тут же score = 200 — противоречие, так
нельзя. В Python всё нормально: первая строка запомнила 100, вторая
велела запомнить 200 вместо него. Каждая строка с = — это команда
«запомни», а не утверждение «оно такое».
Запомни направление: справа считается значение, слева ставится имя.
Поэтому слева от = всегда стоит имя — туда нельзя записать число.
Строку 25 = age Python не пропустит: слева всегда должно быть имя, а не
число.
Переписать значение
Раз = — это «запомни заново», одну и ту же переменную можно
переприсваивать сколько угодно. Новое значение затирает старое:
В выводе:
грустный
весёлый
Между двумя вызовами print мы переписали mood. Первый print напечатал старое
значение, второй — новое. Переменная всегда хранит ровно одно значение —
последнее, которое ты в неё положил. Старое нигде не остаётся, его просто
больше нет.
Это нормальный, ежедневный приём. Счёт в игре растёт, настроение героя меняется, текущий игрок становится другим — переменная просто запоминает новое поверх старого.
Как можно называть переменные
Имя переменной нельзя придумывать совсем как попало — у Python есть жёсткие правила. Нарушишь — программа не запустится.
- Имя состоит из латинских букв, цифр и нижнего подчёркивания
_. - Начинаться с цифры нельзя.
age2— можно,2age— нет. - Пробелов внутри имени быть не может. Поэтому слова склеивают через
_:player_name, а неplayer name. - Регистр важен:
ageиAge— два разных имени.
Вот что бывает, если начать имя с цифры:
Эта программа не выведет ничего — она упадёт ещё до запуска с ошибкой:
SyntaxError: invalid syntax
Python увидел 2player и не понял, что это: на число не похоже, на
правильное имя тоже. SyntaxError означает, что код написан не по правилам
языка, и Python даже не начал его выполнять.
Как стоит называть переменные
Прошлый раздел — про то, что Python разрешает. Этот — про то, как писать, чтобы код было приятно читать. Это не правила языка, а договорённость между людьми, но её придерживаются все.
Имя должно говорить, что внутри. Сравни два варианта одной программы:
Работает, выводит Алиса 25. Но через неделю ты сам не вспомнишь, что
такое x и y. А теперь по-человечески:
Тот же вывод — Алиса 25 — но теперь по именам сразу ясно, что за чем.
Правила хорошего имени короткие:
- Имя — на латинице и осмысленное:
name,age,price,score. Неaи неx— кроме случаев, когда в переменной и правда лежит что-то безымянное. - Несколько слов — через нижнее подчёркивание, маленькими буквами:
player_name,total_price. Такой стиль называетсяsnake_case, и в Python принят именно он. - Имя на английском, даже если значение русское. Python разрешает и кириллицу в именах, но так почти никто не пишет — и тебе не стоит.
Recap
- Переменная — имя для значения. Подписал значение именем — Python его запомнил, и дальше ты зовёшь значение по имени.
- Присвоить — это
имя = значение. Слева имя, справа значение.age = 25запоминает25под именемage. - Зови имя без кавычек.
print(age)печатает значение переменной,print('age')— буквыage. Имени, которого ещё нет, нет и значения:NameError: name 'age' is not defined. =— это «запомни», а не «равно». Справа считается, слева запоминается. Поэтому слева всегда имя.- Переприсваивание затирает старое.
mood = 'весёлый'послеmood = 'грустный'оставит только'весёлый'. Переменная хранит одно значение — последнее. - Правила имени. Латинские буквы, цифры,
_; не начинать с цифры; без пробелов; регистр важен. ИначеSyntaxError. - Стиль имени. Осмысленно, на латинице,
snake_case:player_name, а неxи неИмя.