Типы данных
В программировании, типы данных являются концептуально важными элементами. Переменные хранят данные любого типа, а над данными совершаются операции. Python имеет встроенные типы данных, которые можно сгруппировать следующим образом:
- строковые типы:
str - численные типы:
int,float,complex - последовательности:
list,tuple,range - ассоциативные массивы:
dict - множества:
set,frozenset - логические типы:
bool - бинарные типы:
bytes,bytearray,memoryview - специальные типы:
NoneType,ellipsis,NotImplementedType
Рассмотрим подробнее все эти типы данных.
Заметка
Узнать тип значения можно с помощью функции
type():>>> x = 7 >>> print(type(x))<class 'int'>
Строковые типы
str
Строковый тип данных str - неизменяемый тип данных, представляющий последовательность символов, заключённую в одинарные или двойные кавычки:
name = "Heralt"
print(name)
msg = 'Hello!'
print(msg)
'Heralt'
'Hello!'
Если имеется длинный текст, состоящий из множества символов, то его можно разбить на несколько строк кода. В этом случае запись заключается в круглые скобки, а части текста в отдельные кавычки:
text = ("Lorem ipsum dolor sit amet,"
"consectetur adipiscing elit, sed do eiusmod"
"tempor incididunt ut labore et dolore magna aliqua.")
В случае многострочного текста строка заключается в тройные двойные или одинарные кавычки:
text = """Lorem ipsum dolor sit amet,
consectetur adipiscing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua."""
Предупреждение
Стоит быть внимательными с многострочным текстом, так как любой символ, находящийся внутри тройных кавычек, интерпретируется как часть текста. Также автоматически вставляются специальные символы, например, символ переноса строки
\nв конце строки.
Специальные символы - управляющие последовательности, которые представляют собой логическое кодирование, а также им обычно не приписано графическое представление. В Python специальные символы в строке начинаются с обратного слэша \. Например:
\n- символ переноса строки;\t- символ табуляции;\'- одинарная кавычка внутри строки;\"- двойная кавычка внутри строки;\\- обратный слэш.
Используем несколько специальных символов в строке:
text = "News:\n\t\"Rain expected today\""
print(text)
News:
"Rain expected today"
Может возникнуть ситуация, когда специальные символы могут помешать. Пример из жизни пользователей Windows:
path = "C:\Users\Vlad\names.txt"
print(path)
C:\Users\Vlad
ames.txt
В ходе обработки строки был встречен специальный символ переноса строки \n, из-за чего часть пути до файла была перенесена на новую строку. Дабы избежать такой ситуации, можно перед определением строки использовать r (значит raw), чтобы специальные символы не интерпретировались:
path = r"C:\Users\Vlad\names.txt"
print(path)
C:\Users\Vlad\names.txt
Численные типы
int
Численный тип данных int - неизменяемый тип данных, представляющий целое число неограниченного размера. Пример:
age = 25
print("My age:", age)
My age: 25
Стандартные числа по умолчанию расцениваются как числа в десятичной системе счисления, однако Python поддерживает и другие виды записи, если перед числом указать нужный префикс:
- в двоичной системе (
0b- b значит binary):a = 0b101 b = 0b10101 print(a, b)5 21 - в восьмеричной системе (
0o- o значит octal):a = 0o5 b = 0o25 print(a, b)5 21 - в шестнадцатеричной системе (
0x- x значит hexadecimal):a = 0x5 b = 0xA5 print(a, b)5 165
Подсказка
Как вы могли заметить, функция
print()по умолчанию всегда выводит число в десятичной системе счисления. Соответствующие представления (в виде строки) вывести с помощью следующих функций:
- для двоичной
bin()- для восьмеричной
oct()- для шестнадцатеричной
hex()Пример:
print(bin(0b10101)) print(oct(0o25)) print(hex(0xA5))'0b10101' '0o25' '0xA5'
float
Численный тип данных float - неизменяемый тип данных, представляющий число с плавающей запятой. Степень точности зависит от платформы, но на практике обычно реализуется в виде 64-битного 53-разрядного числа. В качестве разделителя целой и дробной части в Python используется точка .. Пример:
weight = 72.3
pi = 3.1415927
zero = 0.
print(weight, pi, zero)
72.3 3.1415927 0.0
В примере можно заметить, что если после точки не указать дробную часть, то число все равно будет создано типа float. Также имеется поддержка экспоненциальной записи числа:
permeability = 5e-10
pressure = 1E+5
print(permeability, pressure)
5e-10 100000.0
Число после экспоненты указывает степень числа 10, на которое надо умножить основное число.
complex
Численный тип данных complex - неизменяемый тип данных, определяющих комплексные числа вида \(a + bj\), где \(a\) и \(b\) - вещественные числа, а \(j\) - мнимая единица (число, для которого выполняется равенств: \(j^2 = -1\)). Пример:
num = 2 + 5j
print(num)
(2+5j)
Последовательности
list
Тип последовательности list - изменяемый тип данных, представляющий список, т.е. упорядоченный набор значений, который может состоять из элементов различных типов данных. Пример:
# пустой список
empty = []
# с различными элементами
mylist = [5.0, "not apple", True]
print(empty, mylist)
[] [5.0, 'not apple', True]
tuple
Тип последовательности tuple - неизменяемый тип данных, представляющий кортеж, т.е. упорядоченный набор фиксированной длины, который может состоять из элементов различных типов данных. Пример:
# пустой кортеж
empty = ()
# с различными элементами
mytuple = (5.0, "not apple", True)
print(empty, mytuple)
() (5.0, 'not apple', True)
Также кортеж используется в качестве записей с неименованными полями:
num, fruit, isAlive = (5.0, "not apple", True)
print(num)
print(fruit)
print(isAlive)
5.0
'not apple'
True
В данном примере происходит следующее - каждой переменной присваивается значение элемента кортежа. Важно, чтобы количество переменных и длина кортежа совпадали, иначе будет вызвана ошибка. Данный подход называется распаковкой и применим в целом для всех видов последовательностей и множеств, но обычно используется с кортежами.
Предупреждение
Если вы присваиваете одной переменной кортеж, который состоит из одного элемента, то это может быть воспринято как операция распаковки:
# распакуется a = (5) # верная запись для создания кортежа b = (5,) print(type(a)) print(type(b))<class 'int'> <class 'tuple'>
range
Тип последовательности range - неизменяемый тип данных, представляющий последовательность целых чисел от какого-то одного значения до другого с определённым шагом. Используется обычно для повторения операций несколько раз при помощи итераторов и циклов. Пример:
# от 1 до 10
a = range(1, 10)
# от 10 до -5 с шагом -2
b = range(10, -5, -2)
print(a, b)
range(1, 10) range(10, -5, -2)
Если не указывать третий аргумент, то по умолчанию используется шаг равный единице.
Ассоциативные массивы
dict
Ассоциативный массив dict - изменяемый тип данных, представляющий словарь, т.е. коллекцию пар “ключ - значение”. Значение может быть любого типа, а ключ должен иметь хешируемый тип. Пример:
# пустой словарь
empty = {}
# с различными парами key-value
mydict = { "apple": 5.0, 4: True }
print(empty, mydict)
{} {'apple': 5.0, 4: True}
Множества
set
Тип множества set - изменяемый тип данных, представляющее неупорядоченное множество. Является реализацией математического объекта множество. Может содержать элементы различных типов данных, которые хэшируются, но не содержит дубликатов. Пример:
# пустое множество
empty = set()
# с различными элементами
myset = { 5.0, "not apple", True }
# с дубликатами
duplicats = { 5, 5, 6, 7, 7, 8}
print(empty, myset)
print(duplicats)
set() {5.0, 'not apple', True}
{5, 6, 7, 8}
В виду того, что для создания словаря также используются фигурные скобки - пустое множество можно создать с помощью функции set().
frozenset
Тип множества frozenset - неизменяемый тип данных, представляющее неупорядоченное множество. Является реализацией математического объекта множество. Может содержать элементы различных типов данных, которые хэшируются, но не содержит дубликатов. Пример:
# пустое множество
empty = frozenset()
# с различными элементами
myset = frozenset({ 5.0, "not apple", True })
# с дубликатами
duplicats = frozenset({ 5, 5, 6, 7, 7, 8})
print(empty, myset)
print(duplicats)
frozenset() frozenset({5.0, 'not apple', True})
frozenset({5, 6, 7, 8})
Как было сказано в определении, вся разница между set() и frozenset() в том, что множество frozenset() неизменяемо, нельзя добавить или убрать элементы.
Логические типы
bool
Логический тип данных bool - примитивный неизменяемый тип данных, принимающий два возможных значения - True (истина) или False (ложь). Используется, чтобы показать, верно или ложно выражение или значение.
isAlive = True
print(isAlive)
True
Специальные типы
NoneType
Специальный тип NoneType - неизменяемый тип данных, представляющий собой отсутствие значения. Пример:
empty = None
print(empty)
None
ellipsis
Специальный тип ellipsis - неизменяемый тип данных, представляющий собой многоточие. Присутствует в Python для поддержки пользовательских типов. Пример:
a = ...
print(a)
Ellipsis
Активно используется в пакете NumPy для сокращенного задания среза многомерного массива, например, x[i, ..., j] будет эквивалентно x[i, :, :, j].
NotImplementedType
Специальный тип NotImplementedType - неизменяемый тип данных, представляющий собой объект, который возвращается при перегрузке операторов, когда типы операндов не поддерживаются. Пример:
a = NotImplemented
print(a)
NotImplemented