@kazakovmaksim

Что такое «типы данных» в Python?

Вопрос вроде простой, задают на всех собеседованиях, но мне не всё понятно в общепринятых ответах на этот вопрос)
Вот что такое "типы данных в Python?"
Ну понятно, что это строка, список, словарь и т.д.
Но вот map, range, срез это же тоже типы данных?
И всё остальное для чего есть классы тоже же сюда следует отнести?
То есть их больше 40? (не принимая во внимание пользовательские классы).
На сколько я понимаю, все типы данных - это классы. Но верно ли обратное утверждение? Каждый класс - это отдельный тип данных?
  • Вопрос задан
  • 333 просмотра
Решения вопроса 1
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
Все типы данных - это классы, но не все классы - это типы данных. Хотя классы - это типы=) но не буду вас путать.
"map, range, срез" - это не типы данных.
Полагаю в том вашем вопросе од типами жанных имеют в виду простые типы вроде строк, чисел с плавающей точкой, целых чисел и даже комплЕксных.
Кортежи (tuple) и словари (dict) - это уже структуры данных, коллекции... как угодно. Да, технически это тоже классы и в каком-то смысле их можно назвать типами, но все эти терминологические дебри вам ни к чему.
Просто считайте типами данных атомарные значения простых типов. Если к вам докопаются при таком понимании, то надо таких слать=).
Дальше интереснее. range, к примеру, это класс, инстанс которого "умеет" делать генератор арифметических последовательностей. Вот это вот слово "умеет" связано с питоновским понятием протоколов. К примеру, если к объекту можно обратиться по индексу, значит он поддерживает соответствующий протокол __getitem__. Если объект поддерживает срезы, то в этот метод можно подать специальный объект - инстанс slice. Этот инстанс просто несёт три параметра среза (начало, конец и шаг), а как его будет применять объект - это на откуп программисту.

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

Просто доверьтесь одному из учебников и не пытайтесь перепрыгнуть через голову.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
SuperZombi
@SuperZombi
Нет map, range, срез это не типы данных. Это функции. Они выполняют операции над данными.
На счет классов, да. class Int или class String описывают типы данных и их методы (функции которые можно выполнить с ними).
Если вам трудно это понять, то представьте, что тип данных это надпись на коробке, которая обозначает что в ней находится.
Например, есть две коробки, на одной написано "Игрушки", а на другой "Провода". Это своего рода типы данных.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы