Перейти к содержимому
Теория · Переменные и типы · урок 3 из 7

Базовые типы

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

Представьте, что на каждом жетоне, кроме значения, выбито клеймо: «целое число», «дробное число» или «текст». От клейма зависит, что с жетоном можно делать.

Давайте посмотрим, как это проявляется в коде. Один и тот же оператор + даёт разные результаты для разных значений. Цифры без кавычек складываются как числа, а в кавычках — склеиваются как текст:

Python
print(7 + 3)  # 10
print("7" + "3")  # 73
print(type(7))  # <class 'int'>
print(type("7"))  # <class 'str'>

Разберём пример по строкам:

  1. 7 + 3 складывает два числа и печатает 10.
  2. "7" + "3" склеивает две строки и печатает 73.
  3. type(7) возвращает тип числа 7, и print выводит его как <class 'int'>.
  4. type("7") возвращает тип строки: <class 'str'>.

Что такое тип

Разница в типе значения: 7 — это целое число, тип int, а "7" — текст, тип str. Тип определяет, какие операции значение поддерживает и как они работают. В нашей картинке тип — то самое клеймо на жетоне.

Функция type() возвращает тип объекта, а print выводит его в виде <class '…'>. Значение, записанное прямо в коде, — 7, "7", 2.5 — называют литералом.

Пять базовых типов

ТипПримерыЧто хранит
int0, 42, -7целое число
float2.5, -0.1, 3.0дробное число
str"hi", 'hi', ""текст
boolTrue, Falseлогическое значение
NoneTypeNoneотсутствие значения

Разберём каждый тип подробнее.

Числа int и float

Число с точкой — всегда float, даже если дробной части нет: 3.0 и 3 — значения разных типов.

Если в сложении, вычитании или умножении участвуют int и float, результат будет float. Так 2 * 2.5 даёт 5.0, а 2 * 2.0 — 4.0. Те же действия над двумя int дают int: 7 * 3 — это 21.

Строки str

Текст в Python называют строкой, её тип — str. Строку записывают в двойных или одинарных кавычках, и "hi" с 'hi' — одно и то же значение. В коде курса мы пишем двойные кавычки. Пустые кавычки "" дают пустую строку.

Логический тип bool

Тип bool хранит одно из двух логических значений: True или False. Оба пишутся с заглавной буквы. Такое значение отвечает на вопрос «да или нет»: открыт ли магазин, есть ли товар на складе.

Значение None

Значение None означает, что значения нет. Его возвращает, например, функция без return. Тип None называется NoneType, и других значений у этого типа нет.

Тип принадлежит значению

Вернёмся к биркам. Клеймо выбито на жетоне, а не на бирке. Поэтому переменная в Python не имеет своего типа. Тип есть у объекта, на который она ссылается, и после нового присваивания он может стать другим:

Python
x = 42
print(type(x))  # <class 'int'>
x = "forty-two"
print(type(x))  # <class 'str'>
x = None
print(x, type(x))  # None <class 'NoneType'>

Давайте разберём по шагам:

  1. x = 42 привязывает бирку x к целому числу, и type(x) печатает <class 'int'>.
  2. x = "forty-two" перевязывает x на строку, и тот же вызов печатает <class 'str'>.
  3. x = None перевязывает x на None, и print выводит None <class 'NoneType'>.

type(x) смотрит на объект, на который x ссылается в момент вызова. Сам объект свой тип не меняет: 42 остаётся int, а новое присваивание связывает x с другим объектом. Клеймо на жетоне нельзя перебить — можно только перевязать бирку на другой жетон.

Этот вопрос часто задают на собеседовании: «Есть ли у переменной в Python тип?» Ответ: тип есть у объекта, а переменная лишь ссылается на него. Одно и то же имя может ссылаться сначала на int, потом на str.

Частая ошибка

Логическое значение написали со строчной буквы:

Python
is_open = true  # ✗
print(is_open)
TEXT
NameError: name 'true' is not defined. Did you mean: 'True'?

Python различает регистр букв, поэтому true для него — обычное имя переменной, а такой переменной нет. Значения True, False и None пишутся только с заглавной буквы.

Главное

  • Тип определяет, какие операции поддерживает значение: 7 + 3 даёт 10, а "7" + "3" — "73".
  • Базовые типы — int, float, str, bool и NoneType; type() возвращает тип объекта.
  • int вместе с float в арифметике дают float, а число с точкой — всегда float.
  • Тип есть у объекта, а не у переменной: после нового присваивания type(x) может стать другим.

Подпишись, чтобы пройти курс

Курс бесплатный. Войди через Telegram и подпишись на канал — откроются все уроки.

Войти другим способом