Урок 6 из 84 · Основы Python
Типы данных
Типы данных ( Data types ) - это классификация различных состояний хранения информации. Другими словами, для компьютера 1 и "1" это разные типы данных. Первый относится к integer(целое число), а второй к string (строка). И сложить их вместе мы сможем только преобразовав один тип к другому.
Например:
print(1 + "1")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
Мы получили ошибку TypeError . Программа говорит, что сложение целого числа и строки невозможно.
Окей. Если мы хотим получить в ответе строку, то тогда мы должны преобразовать целое число в строку с помощью функции str().
print(str(1) + "1")
Output:
11
В ответе мы получаем строку 11. Почему 11? Почему не 2, спросите вы. Но так как мы складываем строки, математические операции внутри строк не отработают, произойдеть лишь склеивание.
Чтобы получить число 2, мы должны преобразовать строку "1" в тип данных int c помощью функции int()
print(1 + int("1"))
Output:
2
Тоесть, мы с вами поняли, что типы данных играют значительную роль в программе.
Существуют различные типы данных в питоне. Они делятся между собой на 2:
-
Изменяемые (Mutable)
Под изменяемыми понимают типы, объекты которых могут быть изменены на месте, как, например, список, который имеет модифицирующие его методы list.remove, list.append, ... [10]
- bytearray
- Списки
- Словари (dict)
- Множества (set)
-
Неизменяемые (Immutable)
Напротив, у неизменяемых объектов отсутствует модифицирующие их методы
- Числа (int, float, complex, Decimal, Fractions)
- Строки
- Кортежи
- Bytes
- Диапазон (range)
- Frozenset
- bool
- None
- NotImplemented
- function
Динамическая типизация vs статическая типизация
В языках с динамической типизацией в одну и ту же переменную можно записывать разного типа данные:
a = 123
a = "python is great"
В языках со статической типизацией это не допускается. В данном случае, при объявлении переменной “a” и присвоении ему значения 123, тип у этой переменной стал “int”, и мы получим ошибку если мы той же переменной попытаемся присвоить значение "python is great" тип у которого “string”.
Типы данных
-
NoneЭтот тип имеет одно значение. Существует только один объект с этим значением, доступ к которому осуществляется через встроенное имя None. Этот тип используется для обозначения отсутствия значения во многих ситуациях, например, он возвращается из функций, которые ничего явно не возвращают. Его истинное значение ложно
-
boolэто логический тип данных, который может содержать значения True или False. bool является подтипом целочисленного типа и, соответственно, почти во всех контекстах ведет себя как 0 для False и 1 для True. Исключением является его преобразование в строковый тип, при котором возвращаются строковые значения 'False' или 'True'
-
ЧислаЧисла являются неизменяемыми типами данных. К ним относятся встроенные типы int, float, complex, а также типы Decimal и Fractions, которые могут быть импортированы, соответственно, из модулей decimal и fractions
-
intТип int представляет целые числа, размер которых ограничен лишь объемом оперативной памяти.
-
FloatТип float представляет числа с плавающей запятой. Python не поддерживает числа с плавающей запятой одинарной точности: экономия на использовании процессора и памяти, которая обычно является причиной их использования, сводится на нет из-за накладных расходов на использование объектов в Python, поэтому нет смысла усложнять язык двумя типами чисел с плавающей запятой.
-
complexТип complex представляет собой комплексные числа в виде пары чисел с плавающей запятой двойной точности, которые, в свою очередь, представляют действительную и мнимую части. Действительная и мнимая части комплексного числа z могут быть получены с помощью атрибутов только для чтения z.real и z.imag.
-
strСтроки являются неизменяемыми последовательностями кодовых точек Unicode. Все кодовые точки в диапазоне U+0000 - U+10FFFF могут быть представлены в виде строки.
strявляется рекурсивной структурой данных, каждая кодовая точка в строке сама является объектомstrдлиной, равной 1. Вероятно, поэтому у Python отсутствует тип char. -
bytesТип bytes представляет собой неизменяемую последовательность одиночных байтов (целых чисел в диапазоне 0 <= x < 256) или, другими словами, неизменяемый массив байтов. Объекты bytes могут быть декодированы в строку с помощью метода decode().
-
bytearrayОбъект bytearray является изменяемым массивом байтов. Помимо того, что байтовые массивы могут быть изменяемыми (и, следовательно, не подлежащими изменению), они обеспечивают тот же интерфейс и функциональность, что и неизменные байтовые объекты bytes.
-
listСписок представляет собой последовательность, элементами которой могут быть произвольные объекты Python. Списки реализованы как динамические массивы, что допускает добавление и удаление элементов, а также автоматическую корректировку резервного хранилища, в котором эти элементы содержаться.
-
tupleКортежи - это неизменяемые последовательности. Аналогично спискам, элементы кортежа могут содержать произвольные объекты Python.
-
rangeТип range представляет собой неизменяемую последовательность чисел, обычно используемая в цикле for.
-
dictТип dict или словарь - это изменяемая структура данных, которая является отображением ссылок на объекты, доступ к которым может быть получен по ключу, а не по позиции. Словари реализованы в виде динамически расширяемых хеш-таблиц.
-
setМножества представляют собой неупорядоченные коллекции уникальных неизменяемых хеш-объектов. Множества не могут быть проиндексированы, но являются итерируемыми.
Обычно они используются для удаления дубликатов из последовательности или проверки на принадлежность.
-
frozensetявляется неизменяемым множеством. Поскольку объект этого типа является неизменяемым, то он может быть использован в другом множестве или в качестве ключа словаря.
-
functionОбъекты функций создаются с помощью определений функций. Единственная операция над объектом-функцией - вызывать его:
func(arguments)На самом деле существует два вида объектов функций: встроенные и пользовательские. Оба вида поддерживают одну и ту же операцию вызова функции, но их реализация отличается, следовательно - это разные типы объектов.