← Все уроки

Переменные — чтобы запомнить

Раздел 1.2 · ~30 мин · draft

Чтобы программа запомнила

В прошлом уроке print печатал значение, и на этом всё заканчивалось: напечатал — забыл. Но настоящая программа должна помнить. Считала возраст один раз — и дальше пользуется им хоть десять раз, не пересчитывая.

Чтобы запомнить значение, его надо как-то назвать. Представь, что ты вешаешь на значение бумажку с именем: вот это число теперь зовётся age, а вот этот текст — name. Дальше зовёшь значение по имени — и Python приносит его. Имя-ярлык, которым ты подписал значение, и есть переменная. Разберёмся, как их создавать.

Подписать значение именем

Чтобы создать переменную, пишешь имя, знак = и значение. Слева — имя, справа — то, что под этим именем хочешь запомнить.

vars.assign

В выводе появится:

25

Разберём по шагам. Строка age = 25 говорит Python: «запомни число 25 под именем age». Это называется присвоить значение переменной. После этой строки имя age живёт в программе и хранит 25. Во второй строке мы зовём age по имени внутри print — и Python подставляет туда то, что запомнил. В прошлом уроке аргументом print был текст в кавычках, теперь — имя переменной: тот же аргумент, просто Python сначала подставляет вместо него запомненное значение.

Запоминать можно не только числа. Текст — точно так же, в кавычках:

vars.assign

В выводе:

Алиса

Справа от = может стоять что угодно из того, что ты уже умеешь печатать: число, текст в кавычках. Слева — всегда имя, под которым это запомнится.

Звать по имени

Раз значение подписано именем, дальше с ним работаешь через это имя. Один раз запомнил — пользуешься сколько надо:

vars.use

В выводе:

Привет, Алиса
Алиса

Имя name сработало дважды, и оба раза Python подставил 'Алиса'. Вот зачем переменные: запомнил значение один раз — зовёшь его сколько угодно.

Тут важный момент, на котором спотыкаются почти все. Сравни два вызова:

vars.use

В выводе:

25
age

Видишь разницу? print(age) — без кавычек — печатает значение переменной, число 25. А print('age') — в кавычках — печатает сам текст age, три буквы. Кавычки решают всё: без них Python ищет имя и приносит запомненное значение, в кавычках — печатает буквы как есть.

= — это не «равно»

Знак = в Python читается не как «равно» из математики. В математике age = 25 означало бы «age равно 25» — утверждение, констатацию факта. В Python = — это действие: «возьми то, что справа, и запомни под именем слева». Стрелка справа налево, а не знак равенства.

Из-за этого работают штуки, которые в математике выглядели бы абсурдно:

vars.equals_not_equality

В выводе:

200

В математике score = 100 и тут же score = 200 — противоречие, так нельзя. В Python всё нормально: первая строка запомнила 100, вторая велела запомнить 200 вместо него. Каждая строка с = — это команда «запомни», а не утверждение «оно такое».

Запомни направление: справа считается значение, слева ставится имя. Поэтому слева от = всегда стоит имя — туда нельзя записать число. Строку 25 = age Python не пропустит: слева всегда должно быть имя, а не число.

Переписать значение

Раз = — это «запомни заново», одну и ту же переменную можно переприсваивать сколько угодно. Новое значение затирает старое:

vars.reassign

В выводе:

грустный
весёлый

Между двумя вызовами print мы переписали mood. Первый print напечатал старое значение, второй — новое. Переменная всегда хранит ровно одно значение — последнее, которое ты в неё положил. Старое нигде не остаётся, его просто больше нет.

Это нормальный, ежедневный приём. Счёт в игре растёт, настроение героя меняется, текущий игрок становится другим — переменная просто запоминает новое поверх старого.

Как можно называть переменные

Имя переменной нельзя придумывать совсем как попало — у Python есть жёсткие правила. Нарушишь — программа не запустится.

Вот что бывает, если начать имя с цифры:

vars.naming_rules

Эта программа не выведет ничего — она упадёт ещё до запуска с ошибкой:

SyntaxError: invalid syntax

Python увидел 2player и не понял, что это: на число не похоже, на правильное имя тоже. SyntaxError означает, что код написан не по правилам языка, и Python даже не начал его выполнять.

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

Прошлый раздел — про то, что Python разрешает. Этот — про то, как писать, чтобы код было приятно читать. Это не правила языка, а договорённость между людьми, но её придерживаются все.

Имя должно говорить, что внутри. Сравни два варианта одной программы:

vars.naming_style

Работает, выводит Алиса 25. Но через неделю ты сам не вспомнишь, что такое x и y. А теперь по-человечески:

vars.naming_style

Тот же вывод — Алиса 25 — но теперь по именам сразу ясно, что за чем. Правила хорошего имени короткие:

Recap