Зачем вообще нужны типы
Тип — это просто категория, которая говорит Python, как должно вести себя значение. Сложить два целых — это арифметика; сложить две строки — это конкатенация; сложить строку и целое — это ошибка. Тип значения определяет, какие операции над ним имеют смысл.
У Python небольшой, дружелюбный набор встроенных типов. Четыре из них — int, float, str, bool — ты будешь использовать почти в каждой программе. Остальные появляются, когда ты начинаешь организовывать данные в коллекции.
Числа: int и float
Два вида чисел, и Python сам решает, какой ты получил, исходя из того, как ты его записал:
Нет десятичной точки — получаешь int. Есть — получаешь float. Арифметика свободно их смешивает — любая операция с участием float даёт float:
Целые числа в Python могут быть сколь угодно большими — сколько позволяет память: никакого переполнения, никакого фиксированного 32- или 64-битного потолка. Ты можешь посчитать 2 ** 1000, и Python вернёт тебе каждую цифру.
Float-ы следуют обычным правилам IEEE 754, что оборачивается парой классических сюрпризов:
Выведет 0.30000000000000004, а не 0.3. Это не баг Python — это то, как в любом языке работает двоичная плавающая арифметика. Если нужна точная десятичная арифметика (например, с деньгами) — возьми модуль decimal. Для всего остального обычно хватает округления в момент отображения.
Строки: str
Строки — это последовательности символов. Оборачивай их в одиночные или двойные кавычки — Python не интересует, какие именно, лишь бы открывающая и закрывающая совпадали:
Строки в тройных кавычках (""" ... """) охватывают несколько строк:
У строк огромное API, которое ты освоишь постепенно: срезы, методы вроде .upper(), .split(), .replace(), а также f-форматирование вида f"Hello, {name}". Строкам посвящена отдельная страница дальше.
Булевы: bool
Два значения, написанные ровно так, как показано — True и False, с заглавной буквы в начале. Сравнения дают булевы:
Под капотом True и False — это буквально 1 и 0, так что булевы можно складывать, если вдруг нужно подсчитать, сколько условий оказались истинными:
None: отсутствие значения
None — это способ Python сказать «значения нет». Функции, которые явно ничего не возвращают, возвращают None. Ты также будешь использовать его как заглушку:
Соглашение — проверять через is None и is not None, а не == None. is проверяет идентичность, и именно это ты имеешь в виду.
Списки, кортежи, множества, словари
Это четыре встроенных коллекционных типа. Каждому посвящена своя страница, а здесь — беглый набросок, чтобы ты их узнал:
Правила большого пальца:
- Список: последовательность, которую ты ожидаешь менять. Добавлять, удалять, сортировать — пожалуйста.
- Кортеж: последовательность, которую хочется защитить от изменений. Часто — для записей фиксированной формы вроде координат
(x, y). - Множество: мешок уникальных элементов, когда дубликаты были бы багом.
- Словарь: поиск по ключу. Структура в форме JSON.
Преобразование между типами
Python не будет преобразовывать типы за тебя автоматически, когда это могло бы быть рискованно. Превратить целое в строку или строку в число — это то, о чём просят явно:
Если преобразование не имеет смысла — например, int("hello") — Python поднимет ValueError и скажет, что именно ты ему скормил. Ошибка объяснена, чиним и идём дальше.
Проверка типа
Два инструмента, которые стоит знать:
type() отлично подходит для быстрого взгляда в REPL. isinstance() — то, что ты используешь в реальном коде, потому что он хорошо дружит с наследованием и умеет проверять сразу несколько типов.
Небольшое исследование
Запусти блок ниже как есть, потом поменяй пару значений и посмотри, во что превращаются типы:
Тебе пока не нужно понимать 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++, где тип переменной объявляют один раз и он не меняется.