Типы данных
В программировании, типы данных являются концептуально важными элементами. Переменные хранят данные любого типа, а над данными совершаются операции. 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