Переменной в программировании называют именованное место, где программа хранит значение: число, строку, список. Вы пишете age = 25, и дальше в коде вместо числа можно писать age, менять его и подставлять в расчёты.
У каждой переменной есть имя, значение и тип данных. В памяти компьютера ей соответствует участок, куда записано значение.
Ниже разберём, как переменную создают в Python, JavaScript и C, какие бывают типы, как выбирать имена и какие ошибки чаще всего делают новички. Если вы только начинаете, откройте рядом план, как учиться программированию с нуля: переменные там идут первой темой.
Переменная простыми словами

Самая частая аналогия: коробка с наклейкой. На наклейке написано имя, внутри лежит значение. Положили в коробку число 25, подписали её «age», и программа в любой момент достаёт число по имени.
Для Python точнее другая картинка: имя похоже на ярлык, привязанный к объекту. В описании модели выполнения Python сказано, что имена ссылаются на объекты и появляются при операциях связывания имени. Разница становится заметной, когда два имени смотрят на один и тот же список. Этот случай разобран в разделе об ошибках.
| Что есть у переменной | Пример для age = 25 |
|---|---|
| Имя | age |
| Значение | 25 |
| Тип | целое число, в Python это int |
| Место в памяти | участок, где лежит значение; в Python и JavaScript памятью управляет сам язык, в C до адреса можно добраться через указатель |
В школьном курсе информатики переменную определяют как величину с именем, типом и значением, причём значение может меняться во время работы программы. По смыслу это то же самое, только без разговора о памяти и ссылках.
Как создать переменную: объявление, инициализация и присваивание
Эти три слова путают чаще всего, хотя за каждым стоит своё действие:
- Объявление: программа узнаёт, что такое имя существует. В C это
int age;, в JavaScriptlet age;. - Инициализация: первое значение, которое переменная получает при создании, например
int age = 25;. - Присваивание: запись нового значения в уже существующую переменную, например
age = 26.
В Python отдельного объявления нет, переменная появляется в момент первого присваивания. В справочнике языка об этом сказано прямо: в Python нет объявлений, а связывание имени может стоять в любом месте блока кода.
Python
age = 25
name = "Анна"
price = 199.9
is_student = True
print(name, age)
age = age + 1
print(age)
Вывод:
Анна 25
26
Знак = здесь означает присваивание: значение справа записывается в имя слева. Строка age = age + 1 берёт старое значение, прибавляет единицу и кладёт результат обратно. Другие знаки, например += и //, разобраны в статье про операторы Python, а самые первые строки кода есть в подборке простых примеров с Hello World.
JavaScript
let count = 1;
count = 2;
console.log(count); // 2
let создаёт переменную, которую можно менять, const создаёт константу. Старое слово var до сих пор работает, но ведёт себя иначе. Разница описана в разделе про область видимости.
C
#include <stdio.h>
int main(void) {
int age = 25;
double price = 199.9;
age = age + 1;
printf("%d %.1f\n", age, price);
return 0;
}
Программа печатает 26 199.9. В C тип пишут перед именем, и поменять его потом нельзя: age останется целым числом до конца программы.
Типы переменных

Тип говорит, что лежит в переменной и что с этим можно делать. Числа складывают, строки склеивают, логические значения проверяют в условиях. Базовый набор почти во всех языках похож:
| Тип | Что хранит | Python | JavaScript | C |
|---|---|---|---|---|
| Целое число | 25, −3 | int |
number |
int |
| Дробное число | 199.9 | float |
number |
double |
| Строка | "Анна" |
str |
string |
массив char |
| Логическое значение | истина или ложь | bool |
boolean |
bool из stdbool.h |
| Набор значений | несколько элементов подряд | list |
Array |
массив |
Узнать тип в Python помогает функция type(). Для переменных из примера выше она выдаёт:
print(type(age), type(name), type(price), type(is_student))
# <class 'int'> <class 'str'> <class 'float'> <class 'bool'>
Про целые числа есть отдельный разбор типа int и функции int(), про логический тип написана статья о Boolean и значениях true и false.
Статическая и динамическая типизация
В Python тип хранится у значения. Поэтому одно и то же имя можно сначала привязать к числу, а потом к строке:
x = 10
print(type(x)) # <class 'int'>
x = "десять"
print(type(x)) # <class 'str'>
В C так не выйдет. Если положить строку в переменную типа int, компилятор clang 17 откажется собирать программу:
error: incompatible pointer to integer conversion assigning to 'int' from 'char[28]' [-Wint-conversion]
age = "двадцать шесть";
Динамическая типизация удобна в коротких скриптах. Статическая ловит часть ошибок ещё до запуска, и в большом проекте это экономит часы отладки.
Для первого знакомства я бы взял Python: переменная там создаётся одной строкой, без слова-объявления и без типа. К строгим типам C и Java проще прийти потом, когда понятно, что вообще хранится в переменной. Курсы, где с Python начинают с нуля, собраны в разделе Python.
Как называть переменные
Правила имён в разных языках похожи. Для Python они записаны в разделе справочника о лексике языка:
- имя состоит из букв, цифр и подчёркивания, но цифра не может стоять первой:
user2можно,2userнельзя; - регистр важен:
Ageиageбудут двумя разными переменными; - ключевые слова вроде
if,forиclassпод имя переменной занять нельзя; - верхнего предела длины у имени нет.
Кириллица в именах Python тоже работает:
цена = 100
print(цена * 2) # 200
В учебной задаче так можно. В рабочем коде имена пишут латиницей, иначе коллега с другой раскладкой не сможет даже набрать название переменной.
Как записывать имена из нескольких слов, решает соглашение языка. Руководство по стилю PEP 8 рекомендует для функций и переменных строчные буквы с подчёркиваниями: total_price. В JavaScript обычно пишут слитно с заглавной буквой в середине: totalPrice.
| Неудачное имя | Лучше | Почему |
|---|---|---|
x |
user_age |
по имени понятно, что лежит внутри |
data2 |
orders_today |
цифра в конце ничего не объясняет |
l |
items |
PEP 8 велит никогда не брать l, O и I в однобуквенные имена: в некоторых шрифтах их не отличить от единицы и нуля |
Область видимости: где переменная доступна
Переменная доступна только в своей области видимости. Если создать её внутри функции, снаружи этого имени не будет:
def count_total():
result = 42
count_total()
print(result)
NameError: name 'result' is not defined
Такая переменная называется локальной. Переменная, созданная вне функций, глобальная: её видно во всём файле. Как устроены сами функции, разобрано в статье про def и return в Python.
С глобальной переменной есть ловушка. Прочитать её из функции можно, а изменить через += без слова global не получится:
counter = 0
def add():
counter += 1
add()
UnboundLocalError: cannot access local variable 'counter' where it is not associated with a value
Python видит присваивание внутри функции и считает counter локальной переменной, у которой ещё нет значения.
let и var в JavaScript
По справке MDN, переменная из let видна только в блоке, где её объявили, а var объявляет переменную во всей функции. Есть и второе отличие. К let нельзя обратиться до объявления, будет ReferenceError, а var в этот момент просто содержит undefined:
console.log(score);
let score = 10;
// ReferenceError: Cannot access 'score' before initialization
console.log(level); // undefined
var level = 1;
Поэтому в новом коде берут let и const, а var встречается в основном в старых скриптах. Если JavaScript у вас первый язык, программы для начинающих собраны в каталоге курсов JavaScript.
Константы: значения, которые не переписывают
Константа хранит значение, которое после создания не меняют. В JavaScript её объявляют через const, и повторное присваивание падает с ошибкой:
const PI = 3.14;
PI = 3;
// TypeError: Assignment to constant variable.
Тонкость из справки MDN по const: запрещено переназначать сам идентификатор, а объект, на который он указывает, менять можно. Так же работает и массив в const: в него можно добавлять объекты через push.
const user = { name: "Анна" };
user.name = "Олег";
console.log(user.name); // Олег
В Python отдельного слова для констант нет. Есть договорённость из PEP 8: константы обычно объявляют на уровне модуля и пишут заглавными буквами с подчёркиваниями, например MAX_OVERFLOW. Технически такое имя можно переписать, но заглавные буквы как раз предупреждают коллег, что трогать его не нужно.
Частые ошибки новичков

NameError: переменной нет
Симптом: NameError: name 'total' is not defined. В учебнике Python про это сказано так: если переменной не присвоили значение, попытка её использовать даёт ошибку.
Решение: проверьте, что присваивание стоит выше по коду, и сверьте регистр. Total и total для Python разные имена.
Строку склеили с числом
Python на print("Возраст: " + 25) отвечает TypeError: can only concatenate str (not "int") to str. JavaScript молча склеит и выведет Возраст: 25, поэтому такая ошибка в JS всплывает позже и в неожиданном месте.
Та же история с вводом: input() возвращает строку, даже если человек набрал цифры.
Решение: переводить типы явно, через str(25) или f-строку, а ввод числа оборачивать в int(input()).
Одиночное = в условии
Сравнение пишут двумя знаками: ==. Python на if age = 25: выдаёт SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?. В JavaScript if (age = 25) сработает без ошибки: условие запишет 25 в переменную и выполнится, даже если там было 30.
Два имени на один список
a = [1, 2]
b = a
b.append(3)
print(a) # [1, 2, 3]
Строка b = a привязывает второй ярлык к тому же объекту, копии списка при этом не появляется. Поэтому добавление в b видно и через a.
Решение: b = a.copy(), тогда a останется [1, 2]. Как ещё добавлять элементы, показано в инструкции про append(), insert() и extend().
Переменная без значения в C
Если написать int total; и сразу вывести total, программа соберётся, а что окажется в переменной, заранее не известно. С флагом -Wall clang предупреждает: variable 'total' is uninitialized when used here.
Решение: задавать значение сразу при создании, int total = 0;.
Где освоить программирование системно
С переменных начинается любой курс программирования, дальше идут условия, циклы и функции. Закрепить первые темы можно на 30 задачах по Python для начинающих.
Если нужен план с наставником и проверкой домашних заданий, ниже курсы по Python из нашего каталога. Программы по другим языкам собраны в разделе «Программирование и IT».
| Курс | Школа | Стоимость со скидкой | В рассрочку | Длительность | Обзор курса от Checkroi |
|---|---|---|---|---|---|
| Профессия «Python-разработчик» Перейти на сайт курса | 157 335 ₽ | 5987 ₽/мес. | 10 месяцев | Обзор курса | |
| Fullstack-разработчик на Python Перейти на сайт курса | 137 000 ₽ | 7125 ₽/мес. | 21 месяц | Обзор курса | |
| ДО Профессия Python-разработчик Перейти на сайт курса | 149 001 ₽ | 3167 ₽/мес. | 10 месяцев | Обзор курса | |
| Автоматизированное тестирование на Python Перейти на сайт курса | 122 226 ₽ | 4108 ₽/мес. | 9 месяцев | Обзор курса | |
| Профессия Python-разработчик Перейти на сайт курса | 140 040 ₽ | 4279 ₽/мес. | 10 месяцев | Обзор курса |
Больше программ — в полном каталоге курсов по Python




