Menu
Русский

Типы данных Python: int, float, str, bool, list, dict и другие

Обзор встроенных типов данных Python — чисел, строк, булевых, None, списков, кортежей, множеств, словарей — с примерами и подсказками, когда что брать.

Зачем вообще нужны типы

Тип — это просто категория, которая говорит Python, как должно вести себя значение. Сложить два целых — это арифметика; сложить две строки — это конкатенация; сложить строку и целое — это ошибка. Тип значения определяет, какие операции над ним имеют смысл.

У Python небольшой, дружелюбный набор встроенных типов. Четыре из них — int, float, str, bool — ты будешь использовать почти в каждой программе. Остальные появляются, когда ты начинаешь организовывать данные в коллекции.

Числа: int и float

Два вида чисел, и Python сам решает, какой ты получил, исходя из того, как ты его записал:

main.py
Output
Click Run to see the output here.

Нет десятичной точки — получаешь int. Есть — получаешь float. Арифметика свободно их смешивает — любая операция с участием float даёт float:

main.py
Output
Click Run to see the output here.

Целые числа в Python могут быть сколь угодно большими — сколько позволяет память: никакого переполнения, никакого фиксированного 32- или 64-битного потолка. Ты можешь посчитать 2 ** 1000, и Python вернёт тебе каждую цифру.

Float-ы следуют обычным правилам IEEE 754, что оборачивается парой классических сюрпризов:

main.py
Output
Click Run to see the output here.

Выведет 0.30000000000000004, а не 0.3. Это не баг Python — это то, как в любом языке работает двоичная плавающая арифметика. Если нужна точная десятичная арифметика (например, с деньгами) — возьми модуль decimal. Для всего остального обычно хватает округления в момент отображения.

Строки: str

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

main.py
Output
Click Run to see the output here.

Строки в тройных кавычках (""" ... """) охватывают несколько строк:

main.py
Output
Click Run to see the output here.

У строк огромное API, которое ты освоишь постепенно: срезы, методы вроде .upper(), .split(), .replace(), а также f-форматирование вида f"Hello, {name}". Строкам посвящена отдельная страница дальше.

Булевы: bool

Два значения, написанные ровно так, как показано — True и False, с заглавной буквы в начале. Сравнения дают булевы:

main.py
Output
Click Run to see the output here.

Под капотом True и False — это буквально 1 и 0, так что булевы можно складывать, если вдруг нужно подсчитать, сколько условий оказались истинными:

main.py
Output
Click Run to see the output here.

None: отсутствие значения

None — это способ Python сказать «значения нет». Функции, которые явно ничего не возвращают, возвращают None. Ты также будешь использовать его как заглушку:

main.py
Output
Click Run to see the output here.

Соглашение — проверять через is None и is not None, а не == None. is проверяет идентичность, и именно это ты имеешь в виду.

Списки, кортежи, множества, словари

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

main.py
Output
Click Run to see the output here.

Правила большого пальца:

  • Список: последовательность, которую ты ожидаешь менять. Добавлять, удалять, сортировать — пожалуйста.
  • Кортеж: последовательность, которую хочется защитить от изменений. Часто — для записей фиксированной формы вроде координат (x, y).
  • Множество: мешок уникальных элементов, когда дубликаты были бы багом.
  • Словарь: поиск по ключу. Структура в форме JSON.

Преобразование между типами

Python не будет преобразовывать типы за тебя автоматически, когда это могло бы быть рискованно. Превратить целое в строку или строку в число — это то, о чём просят явно:

main.py
Output
Click Run to see the output here.

Если преобразование не имеет смысла — например, int("hello") — Python поднимет ValueError и скажет, что именно ты ему скормил. Ошибка объяснена, чиним и идём дальше.

Проверка типа

Два инструмента, которые стоит знать:

main.py
Output
Click Run to see the output here.

type() отлично подходит для быстрого взгляда в REPL. isinstance() — то, что ты используешь в реальном коде, потому что он хорошо дружит с наследованием и умеет проверять сразу несколько типов.

Небольшое исследование

Запусти блок ниже как есть, потом поменяй пару значений и посмотри, во что превращаются типы:

main.py
Output
Click Run to see the output here.

Тебе пока не нужно понимать for — к нему мы ещё придём — но это даст беглое ощущение встроенных типов на одной картинке.

Выбирай тип по форме данных

Запоминать все типы прямо сейчас не нужно. Нужно уметь узнавать нужный, когда видишь его, и выбирать правильный, когда создаёшь данные. «Это фиксировано или меняется? Уникальные значения или нет? Я ищу по ключу или по позиции?» Эти четыре вопроса в девяносто процентах случаев сами подсказывают коллекционный тип.

Дальше — строки глубже, потому что это единственный тип данных, который ты будешь трогать почти в каждой программе.

Часто задаваемые вопросы

Какие основные типы данных есть в Python?

Числа (int и float), строки (str), булевы (bool), None и четыре коллекционных типа — list, tuple, set и dict. Всё остальное, что ты видишь в Python-коде, собрано из этих плюс горстка других (bytes, complex, frozenset).

Как проверить тип значения в Python?

Оберни его в type(): type(42) возвращает <class 'int'>, type('hi') возвращает <class 'str'>. Для булевой проверки используй isinstance(value, int) — он гибче, потому что работает и с подклассами.

Python — язык со статической или динамической типизацией?

С динамической. Переменная может указывать на значение любого типа, и один и тот же объект-переменная может менять тип на протяжении своей жизни. Это отличается от языков вроде Java или C++, где тип переменной объявляют один раз и он не меняется.

Учитесь программировать с Coddy

НАЧАТЬ