The Python Programming Guide

Типы данных

В программировании, типы данных являются концептуально важными элементами. Переменные хранят данные любого типа, а над данными совершаются операции. Python имеет встроенные типы данных, которые можно сгруппировать следующим образом:

Рассмотрим подробнее все эти типы данных.

Заметка

Узнать тип значения можно с помощью функции 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 специальные символы в строке начинаются с обратного слэша \. Например:

Используем несколько специальных символов в строке:

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 поддерживает и другие виды записи, если перед числом указать нужный префикс:

Подсказка

Как вы могли заметить, функция 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