Типы данных в Python являются фундаментом, на котором выстраивается программный код. В высокоуровневых языках данные представлены как объекты, над которыми совершаются действия, прописанные в коде. Типизация же определяет набор допустимых методов и операций.
Какие типы данных бывают
Базовые типы данных в Python являются встроенными коллекциями. К ним относятся числа, строки, списки. Но есть объекты, созданные самостоятельно, с использованием конструкций и библиотек языка. Обычно они нужны для решения сложных программных задач, а не в повседневной работе.
В Python реализовывать свои объекты нет никакой необходимости. Язык предлагает уже готовые и мощные инструменты разработки, которые гораздо проще использовать. Они позволяют работать с большим объёмом данных, с наименьшими затратами усилий и времени.
Встроенные типы – это эффективные структуры данных. За счет того, что они реализованы на языке C, объекты обеспечивают высокую скорость и производительность кода. Самостоятельно созданные объекты могут выполнять нестандартные задачи. Например, стековые операции. Но они гораздо медленнее стандартных списков.
К основным встроенным в Python типам данных относятся:
- Числа: 1234, 3.1415, 3+4j, Decimal, Fraction.
- Строки: «spam», «b’a\x01c».
- Списки: [1, [2, «three»], 4].
- Словари: {«food»: «spam»}.
- Кортежи: (1, «spam», 4, «U»).
- Множества set(«abc»), {«a», «b»}.
- Логические переменные.
Перечисленные типы принято считать базовыми. При работе с ними используются определенные синтаксические конструкции. Для строк это кавычки, или фигурные скобки для словарей.
Что такое динамическая типизация
В Python нет конструкций для объявления переменных. Объект автоматически задается синтаксисом в процессе выполнения кода, что называется динамической типизацией. Если в среде IDLE написать 6.78, это создаст и вернет числовой тип данных. Выражение в квадратных скобках создаст список, в кавычках – строку. Другой способ задать тип – присвоить значение с помощью знака «=»:
- >>>my_string = «Hello, Python!»
После генерации каждый объект получает определенное место в памяти и набор собственных операций. Но изначально у имен или переменных нет никаких значений и понятий типа. По сути, они являются ссылками на объекты. Поэтому динамическая типизация дает возможность задавать одной переменной несколько значений.
Все объекты языка относятся к двум классам: изменяемые и неизменяемые типы данных. В Python ко второй группе относятся int, float, bool, str, tuple. Эти объекты нельзя изменить, но некоторые из них можно преобразовать благодаря динамической типизации:
- >>>x = «123»
- >>>int(x)
- 123
- >>>float(x)
- 123.0
К изменяемым объектам относятся большинство последовательностей – списки, словари, множество. Они обеспечивают гибкую работу с кодом.
Счетчики ссылок
Вся информация о типе хранится не в имени, а в объекте, на который ссылается переменная. Как только имя получает ссылку на новый объект, интерпретатор удаляет старый, освобождая память.
- >>>x = 12 # присваивает переменной x числовое значение.
- >>>x = «spam» # x становится строкой.
- >>>print(x).
- spam #12 полностью стирается и остается только строковый объект «spam».
В каждом объекте есть счетчик ссылок, за которым следит интерпретатор. Если их количество достигает нуля, объект безвозвратно удаляется, а место, которое он занимал, возвращается в пул свободной памяти. Такое поведение облегчает работу программиста и сокращает время на создание кода. Разработчику не нужно отдельно писать инструкции для уничтожения ненужных объектов.
По сравнению с Java или C++, синтаксис Python в разы проще. Благодаря динамической типизации, код занимает гораздо меньше места, с ним легко и приятно работать. Но, несмотря на видимую простоту и гибкость, Python – это язык со строгими правилами для каждого типа. Методы и операции применимые к одному виду объектов, недопустимы по отношению к другому:
- >>>f = «apple».
- >>>s = «cherry».
- >>>f * s # попытка умножить строки выведет сообщение об ошибке.
Числа
Самая простая для понимания группа данных. Работать с числами каждый умеет еще со школы. Сложные вычисления из высшей математики прикладному программисту вряд ли понадобятся. В большинстве случаев хватает стандартных арифметических подсчетов с помощью следующих операторов:
- сложение: var1+var2;
- вычитание: var1-var2;
- умножение: var1*var2;
- деление: var1/var2;
- остаток от деления: var1%var2;
- целая часть от деления: var1//var2.
Этот вид делится на целочисленные и вещественные объекты. К первой группе относятся отрицательные и положительные целые числа int и логические объекты bool.
Данные типа int по умолчанию записываются в десятичной системе исчисления в виде цифровых литералов. При желании их можно вводить как двоичные, восьмеричные или шестнадцатеричные числа с префиксом 0b, 0o и 0x.
Встроенные bool типы принимают два значения: True и False. Это предопределенные числовые переменные. True равно 1, а False – 0. Если в интерпретаторе написать True + 5, получится 6. Используя конструкции языка любой объект из стандартной библиотеки можно преобразовать в тип bool.
Вещественные числа float и complex
В Python для типа данных float используются числовые литералы с десятичной точкой или необязательной экспонентой: 1.23, 1., 3.14e-10, 4.0e+210. Для работы с float применяют те же стандартные математические операторы, что и для целых чисел int.
При необходимости можно выполнять преобразование типов данных. В Python для этого используются функции int() и round():
- >>> x = 1.8.
- >>> y = 1.8.
- >>> int(x).
- 1 # функция int() отбрасывает дробную часть.
- >>> round(y).
- 2 #функция round() округляет до целого числа.
Тип complex – это комплексные числа, состоящие из двух значений float. Первое является действительной частью и доступно в виде атрибута .real. Вторая часть вызывается с помощью .imag и представляет собой воображаемую составляющую объекта.
Литералы комплексных чисел записываются следующим образом:
- >>> my_number = -89.5+2.125J
- >>> my_number.real, my_number.imag
- (-89.5, 2.125)
Комплексные числа являются неизменяемыми типами данных в Python. Операции преобразования для объектов complex невозможны, любая попытка это сделать немедленно вызовет сообщение об ошибке.
Строки
Строка – это объект, предназначенный для хранения последовательности символов Юникода. В нее записывается текстовая и числовая информация. Литералы строк всегда заключаются в кавычки.
У строк есть длина, которую можно вычислить функцией len():
- >>>x = «Здравствуй, Питон!».
- >>>len(x).
- 18.
У каждого элемента есть свой индекс, или позиция, по которой его можно извлечь:
- >>>x[7].
- «в».
- >>>x[2].
- «р».
Так как строки – это последовательности, они поддерживают операции конкатенации с помощью знака «+» и повторения с использованием «*»:
- >>>x * 3.
- «Здравствуй, Питон!Здравствуй, Питон!Здравствуй, Питон!».
- >>>x + «123».
- «Здравствуй, Питон!123».
Строки, как и числа, являются неизменяемыми типами. Ни одна из перечисленных операций не изменила значение переменной x. Каждый раз создавался новый строковый объект.
Списки
Списки в Python представлены в виде упорядоченных коллекций данных. Они могут любого размера, и содержать всевозможные объекты. Так как списки являются разновидностью последовательностей, к ним применимы методы строк:
- >>>L = [123, «spam», «var», 1.23] #Список из четырех объектов разных типов.
- >>>len(L) #Число элементов в списке.
- 4.
Списки относятся к изменяемым типам данных в Python. Используя функции можно менять количество элементов:
- >>>L.append(0) #В конец списка добавляется новый объект.
- >>>L.
- [123, «spam», «var», 1.23, 0].
- >>> L.pop(2) #Удаляется элемент из середины списка.
- «var».
Словари
Словари являются отображениями данных. Это принципиально новый тип объектов, отличающийся от списков и строк. Доступ к элементам возможен только по ключам. Литерал словаря заключается в фигурные скобки и состоит из пар «ключ: значение»:
- >>>D = {«день»: «пятница», «месяц»: «декабрь», «год»: «2017»}.
- >>>D.
- {«день»: «пятница», «месяц»: «декабрь», «год»: «2017»}.
Чтобы получить значение, нужно указать название словаря с ключом в квадратных скобках:
- >>>D[«день»].
- «пятница».
Чтобы добавить ключ, нужно указать ссылку на значение:
- >>>D[«время»] = «утро» #добавляет пару «ключ: значение».
- >>>D.
- {«день»: «пятница», «месяц»: «декабрь», «год»: «2017», «время»: «утро»}.
Словари представляют самый гибкий вид объектов. В низкоуровневых языках они могут заменить алгоритмы поиска и структур данных. Вместо ввода вручную, словари обеспечивают быстрый поиск по индексу или по ключу.
Кортежи
Кортежи – это те же списки, только в круглых скобках. Они могут хранить произвольное число данных любого типа, но поддерживают меньший набор операций. Их главное отличие – неизменяемость. Кортежи обеспечивают целостность и сохранность объектов, именно поэтому их иногда используют вместо типа list в крупных программах.
В Python 3 тип данных tuple обладает двумя методами, которые есть у списков: .index() для извлечения индекса элемента и .count(), чтобы подсчитать количество одинаковых объектов:
- >>>my_tuple = (1, 2, 3, 4).
- >>>my_tuple.index(2) #на второй позиции стоит цифра 1.
- 1.
- >>>my_tuple.count(1) #покажет сколько единиц в последовательности.
- 1.
Это были основные встроенные типы данных в Python. Также есть дополнительные объекты, которые могут считаться базовыми. Например, множества или нестандартные числовые типы, такие как матрицы, векторы, числа с фиксированной точностью. Для работы с ними требуется серьезное погружение в принципы математики и конструкций Python.