Тип данных отвечает на вопрос: что это за значение и какие действия с ним можно делать. Новичку важно не только знать названия типов, но и понимать, где каждый тип применяется
По этой теме полезно отдельно посмотреть Составьте еженедельное расписание занятий, чтобы расширить контекст и сравнить подходы
По этой теме полезно отдельно посмотреть Аннотации типов для декораторов в Python, чтобы расширить контекст и сравнить подходы
Таблица типов
| Тип | Пример | Для чего нужен |
|---|---|---|
str | "Python" | текст |
int | 42 | целые числа |
float | 3.14 | дробные числа |
bool | True | логика |
NoneType | None | отсутствие значения |
list | [1, 2, 3] | изменяемый список |
tuple | (10, 20) | фиксированная группа |
dict | {"name": "Анна"} | значения по ключам |
set | {"python", "sql"} | уникальные значения |
Проверка типа
value = ["python", "sql"]
print(type(value))
print(isinstance(value, list))
type() показывает конкретный тип. isinstance() удобнее для проверок в условиях
Строки
text = " Python "
print(text.strip())
print(text.lower())
print(len(text))
Строка подходит для текста, адресов, названий, сообщений и данных, которые еще не превращены в число
Числа
price = 1200
quantity = 3
print(price * quantity)
print(price / quantity)
Если число пришло из input() или файла, оно часто будет строкой
value = "42"
print(int(value) + 1)
Логика и None
is_active = True
city = None
if city is None:
print("город не указан")
None лучше проверять через is None, а не через ==
Списки и кортежи
items = ["python", "sql"]
point = (10, 20)
items.append("html")
x, y = point
print(items)
print(x, y)
Список используют, когда данные будут меняться. Кортеж используют для фиксированной пары или группы значений
Словари
profile = {
"name": "Анна",
"age": 28,
"skills": ["Python", "SQL"],
}
print(profile["name"])
print(profile.get("city", "город не указан"))
Словарь подходит для карточек, настроек, строк таблицы и данных из API
Множества
skills = ["python", "sql", "python"]
unique_skills = set(skills)
print(unique_skills)
Множество убирает повторы и быстро проверяет наличие значения
Преобразования типов
| Нужно получить | Пример |
|---|---|
| число | int("42") |
| дробное число | float("3.14") |
| строку | str(42) |
| список | list("abc") |
| множество | set(items) |
Одна задача на несколько типов
Типы данных лучше запоминаются, когда работают вместе. Ниже пример анкеты пользователя: строка, число, список, словарь, логическое значение и None
profile = {
"name": "Анна",
"age": 28,
"skills": ["python", "sql"],
"active": True,
"telegram": None,
}
print(profile["name"])
print(profile["age"] + 1)
print(", ".join(profile["skills"]))
print(profile["telegram"] is None)
Если поменять тип, поменяется и допустимое действие. Со строкой можно делать lower, с числом — сложение, со списком — append, со словарем — доступ по ключу
Как выбирать тип
| Ситуация | Подходящий тип | Пример |
|---|---|---|
| нужно хранить имя | str | "Анна" |
| нужна сумма или возраст | int или float | 1200, 3.14 |
| нужно да или нет | bool | True |
| значения нет | None | telegram = None |
| несколько элементов по порядку | list | ["python", "sql"] |
| запись с полями | dict | {"name": "Анна"} |
| только уникальные значения | set | {"python", "sql"} |
Преобразования и проверки
age_text = "28"
price_text = "1490.50"
age = int(age_text)
price = float(price_text)
print(age + 1)
print(price * 2)
print(isinstance(age, int))
Перед преобразованием пользовательского ввода лучше проверять данные. Для учебных задач достаточно простого условия, в реальном проекте нужна аккуратная валидация
value = "42"
if value.isdigit():
print(int(value))
else:
print("Это не целое число")
Частая путаница
"42" и 42 выглядят похоже, но это разные типы. Строка склеивается со строкой, число складывается с числом. Когда результат странный, первым делом выводите type(value)
Частые ошибки
| Ошибка | Почему случается |
|---|---|
| сложить строку и число | значение из input() не преобразовали |
| изменить кортеж | кортеж не меняется на месте |
| прочитать отсутствующий ключ | в словаре нет такого поля |
ждать порядок от set | множество хранит уникальность, а не порядок |
| вызвать метод строки у списка | перепутан тип значения |